[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Ruby on Rails Relationships

Murdoc

9/24/2006 9:32:00 PM

Hi all,

I'm not sure if this is an appropriate group to ask for assitance with Ruby on Rails, so let me know if it isn't.

Anyways, I am having trouble figuring out how to setup what would appear to be a simple has_one/belongs_to relationship.

I have my tables as follows:

address = {address_id(PK), street_number, street_name, ....}
venue = {venue_id(PK), venue_name, address_id}

Now, logically, each Venue has one address, but an address may be associated to multiple entities. For example:

contact = {contact_id, contact_given, contact_surname, address_id}

If I put the following:

class Venue < ActiveRecord::Base
set_table_name "venue"
set_primary_key "venue_id"
has_one :address
end

class Address < ActiveRecord::Base
set_table_name "address"
set_primary_key "address_id"
belongs_to :venue
end

Then rails is expecting the venue_id field to be present in the address table. It seems illogical to setup the relationship with the "belongs_to :address" tag in the Venue model, as a Venue does not belong to an address, it has an address.

Is there a way to setup this relationship to use the correct linking?

Regards,



--

2 Answers

Innocent

9/27/2006 5:56:00 AM

0

> Then rails is expecting the venue_id field to be present in the
> address table. It seems illogical to setup the relationship with the
> "belongs_to :address" tag in the Venue model, as a Venue does not
> belong to an address, it has an address.

I think you're mixing the object model with the DB schema. Yes--in
object modeling, if a venue has an address, you'd expect the Venue class
to have a pointer to an Address. However, in relational DB schemas,
it's the child table (address) that should have a foreign key
to the parent table (venue)'s primary key.

This becomes more clear if you think about how to represent one-to-many
relationships. Remember, a column in a table should contain only one value.
You may have many rows in a table, but each column in a row should
have only one value.




Murdoc

9/28/2006 7:34:00 AM

0

Innocent wrote:

> > Then rails is expecting the venue_id field to be present in the
> > address table. It seems illogical to setup the relationship with the
> > "belongs_to :address" tag in the Venue model, as a Venue does not
> > belong to an address, it has an address.
>
> I think you're mixing the object model with the DB schema. Yes--in
> object modeling, if a venue has an address, you'd expect the Venue class
> to have a pointer to an Address. However, in relational DB schemas,
> it's the child table (address) that should have a foreign key
> to the parent table (venue)'s primary key.
>
> This becomes more clear if you think about how to represent one-to-many
> relationships. Remember, a column in a table should contain only one value.
> You may have many rows in a table, but each column in a row should
> have only one value.

First, it isn't a one-to-many relationship. Each venue can only ever be associated to a single address record. However, that address may be shared amongst multiple entities (each of which can only ever be linked to one address).

I would have thought that this would be a common scenario that shouldn't be that hard to model in Rails.

--