what is a RoR best practice? match by id or different column?

Posted by Omnipresent on Stack Overflow See other posts from Stack Overflow or by Omnipresent
Published on 2010-05-11T16:09:20Z Indexed on 2010/05/11 16:34 UTC
Read the original article Hit count: 295

Filed under:

I had a terrible morning. Lots of emails floating around about why things don't work. Upon investigating I found that there is a data mismatch which is causing errors.

Scenario Customer and Address are two tables.

Customer contains

class Customer < ActiveRecord::Base
    has_one :address, :foreign_key => "id"        
end

Address Contains

class Address < ActiveRecord::Base
    belongs_to :customer, :foreign_key => "cid"    
end

So the two tables match on id which is the default and that column is auto incremented.

Problem on the edit Page we have some code like this.

params[:line1] = @customer.first.address.line1

It fails because no matching record is found for a customer in the address table. I don't know why this is happening. It seems that over time a lot of records did not get added to Address table. Now problem is that when a new Customer is added (say with id 500) the Address will be added with some other id (say 425) ...now you don't know which address belongs to which customer.

Question Being new to Rails, I am asking whether it is always considered good to create an extra column for joining of the records, rather than depending on the column that is automatically incremented? If I had a seperate column in Address table where I would manually insert the recently added customers id then this issue would not have come up.

© Stack Overflow or respective owner

Related posts about ruby-on-rails