I need help inserting an address record to a tabled called realestates. The relationship between these to tables is 1 to 1. - realestates table has an address_id field set to not NULL class Address < ActiveRecord::Base end class RealEstate < ActiveRecord::Base has_one :address end I created two objects to match these two tables. When I let rails do the insert of RealEstate I get an error stating that address_id is NULL. This means that I would need to insert the address first before inserting the RealEstate record to avoid this problem. But if Real Estate is new record it does not have an id yet and I can''t do that. One option is to remove the constraint NOT NULL I don''t want to do that. So the logical order would be first create an instance variable for RealEstate and do the insert. Second, create and instance variable for address and do the insert like below. @real_estate = RealEstate.new(params[:real_estate]) @address = Address.new(params[:address]) But how do I solve the fact that address_id cannot be NULL on realestates? Am I missing something? Rod -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Jun 14, 2:58 pm, Rodrigo Lueneberg <rails-mailing-l...@andreas- s.net> wrote:> > @real_estate = RealEstate.new(params[:real_estate]) > @address = Address.new(params[:address]) > > But how do I solve the fact that address_id cannot be NULL on > realestates? Am I missing something?@address.build_real_estate(...) ? Fred> > Rod > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Sat, Jun 14, 2008 at 9:58 AM, Rodrigo Lueneberg < rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > I need help inserting an address record to a tabled called realestates. > The relationship between these to tables is 1 to 1. > > - realestates table has an address_id field set to not NULL > > class Address < ActiveRecord::Base > end > > class RealEstate < ActiveRecord::Base > has_one :address > end > > I created two objects to match these two tables. When I let rails do the > insert of RealEstate I get an error stating that address_id is NULL. >You appear to have a misconception about the relationship between has_one/has_many and the db schema. First, you need to declare a belongs_to relation to the ''owning'' class in the owned class, so you need class Address < ActiveRecord::Base belongs_to :real_estate end class RealEstate < ActiveRecord::Base has_one :address end Second, the has_x associations don''t require or use a foreign key field in the table of the class which has related objects, it''s the other way around. The belongs_to association requires that the table of the class which belongs_to another has a foreign key pointing to an instance of the owning class. So with the above declarations the addresses table should have a real_estate_id field not the other way around. If you really want to have an address_id in the real_estates table then you should instead declare that RealEstate belongs_to Address, and Address has_one RealEstate. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
thanks, I did change Address to include belongs_to. But I still get the error: Mysql::Error: Column ''address_id'' cannot be null: INSERT INTO `real_estates` Should I create a address object, reference the realestate from it and save the address object which I assume would create a new real_estate record? something like this: @address = Address.new(params[:address]) @address.realestate = RealEstate.new(params[:real_estate]) instead of @real_estate = RealEstate.new(params[:real_estate]) @real_estate.address = Address.new(params[:address]) this is the code below: class Address < ActiveRecord::Base belongs_to :real_estate end class RealEstate < ActiveRecord::Base has_one :address end class Admin::RealestateController < ApplicationController def index render :text => "Real Estate" end def new render(:action => ''new'') end def create @real_estate = RealEstate.new(params[:real_estate]) @real_estate.address = Address.new(params[:address]) if @real_estate.save render :text => "Saved" else render(:action => ''new'') end end end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Sun, Jun 15, 2008 at 11:38 AM, Rodrigo Lueneberg < rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > thanks, I did change Address to include belongs_to. But I still get the > error: > Mysql::Error: Column ''address_id'' cannot be null: INSERT INTO > `real_estates`Go back and re-read what I posted carefully.> this is the code below: > > class Address < ActiveRecord::Base > belongs_to :real_estate >This declares that the addresses table should have a column called real_estate_id. If you have an address object and have to fetch the corresponding real_estate, then an SQL query select * from real_estates where id = self.real_estate_id end class RealEstate < ActiveRecord::Base has_one :address This does NOT imply that the real_estates table has a column, called address_id. If you have an instance of RealEstate and need to get the corresponding address then the SQL query will be something like: select * from addresses limit 1 where real_estate_id = self.id> > end >If you really want the id of the Address in the RealEstate you need to set up the associations so that RealEstate belongs_to Address, and Address has_one RealEstate, which is the reverse of what you have declared. You also need to make sure that the object with the has_x attribute is saved before the one which belongs_to it. This is because the belongs to object needs the id of the owner, and there won''t be one until the owner is saved. Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Perfect. I am trying it out this weekend. Thank you. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---