Ruby on Rails Relationships

M

Murdoc

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,



--
 
I

Innocent

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.
 
M

Murdoc

Innocent said:
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.

--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,197
Latest member
ScottChare

Latest Threads

Top