On Sep 6, 7:52 pm, Scott LaBounty <[email protected]> wrote:
> I'm trying to use one to one associations where two tables can have one to
> one associations with another table. Here's a simple example of what I'm
> trying to do ...
>
> <<
> require 'rubygems'
> require 'sequel'
>
> # Create an in-memory database
> DB = Sequel.sqlite
>
> DB.create_table :businesses do
> primary_key :id
> String :name, :text=>true, :unique=>true
> end
>
> DB.create_table :people do
> primary_key :id
> String :name, :text=>true, :unique=>true
> end
>
> DB.create_table :addresses do
> primary_key :id
> String :address
> end
The first issue is that if you are using associations, you should have
foreign keys in your tables.
> class Business < Sequel::Model
> one_to_one :address
> end
>
> # Create the Employee model.
> class Person < Sequel::Model
> one_to_one :address
> end
>
> class Address < Sequel::Model
> one_to_one :business
> one_to_one :person
> end
The second problem is that a one to one relationship uses a
many_to_one association for the table that has the foreign key, and a
one_to_one association for the table the foreign key points to.
> business = Business.create(:name => "The Business")
> person = Person.create(:name => "Bob")
>
> address_1 = Address.create(:address => "123 W. Lane, Anytown, CA 91110")
> address_2 = Address.create(:address => "124 W. Lane, Anytown, CA 91110")
>
> business.add_address(address_1)
> person.add_address(address_2)
The third problem is that one_to_one associations act like many_to_one
associations, in that they use setter methods instead of add_/remove_
methods.
> When I try to add the addresses I get ...
>
> <<
> onetotest.rb:43:in `<main>': undefined method `add_address' for #<Business
> @values={:id=>1, :name=>"The Business"}> (NoMethodError)
>
>
>
> The documentation seems to imply that this should work.
Please point out where so I can fix it. The one-to-one relationship
is specifically discussed in
http://sequel.rubyforge.org/rdoc/files/doc/association_basics_rdoc.html,
where it says you should use many_to_one and one_to_one, and talks
about the foreign keys.
Jeremy
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.