I''m having a spot of bother creating a ''has_many'' relationship between two legacy database tables. The relationship is ''company'' table has many linked records in the ''contact'' table. Iv''e used ''generate scaffold'' on these tables and everything is fine. I then decided to define the relationship in the relevant model classes... class Contact < ActiveRecord::Base belongs_to :company,:foreign_key => "companyid" end ---- class Company < ActiveRecord::Base has_many :contact end And then I''ve added the following line to views/company/show.rhtml to try and get at the child elements... <%= debug(@company.contact) %> I''ve tried loads of variations on this setup, but always end up with an error along the lines of... |"invalid identifier: SELECT * FROM contact WHERE (contact.company_id = 100011847)" |Rails appears to be ignoring the foreign_key setting in contact.rb and attempts to use company_id instead of companyid. Can anyone suggest what''s wrong with this setup? Thanks in advance for your help, Derek
On 12/22/05, Derek Mailer <derek.mailer-+T64KQCt4CjQT0dZR+AlfA@public.gmane.org> wrote:> I''m having a spot of bother creating a ''has_many'' relationship between > two legacy database tables. The relationship is ''company'' table has many > linked records in the ''contact'' table. Iv''e used ''generate scaffold'' on > these tables and everything is fine. I then decided to define the > relationship in the relevant model classes... > > class Contact < ActiveRecord::Base > belongs_to :company,:foreign_key => "companyid" > end > ---- > class Company < ActiveRecord::Base > has_many :contact > end > > And then I''ve added the following line to views/company/show.rhtml to > try and get at the child elements... > > <%= debug(@company.contact) %> > > I''ve tried loads of variations on this setup, but always end up with an > error along the lines of... > > |"invalid identifier: SELECT * FROM contact WHERE (contact.company_id = 100011847)" > > |Rails appears to be ignoring the foreign_key setting in contact.rb and attempts to use company_id instead of companyid. Can anyone suggest what''s wrong with this setup? >If your table is actually called "contact" instead of "contacts", you''ll also need to override that. ActiveRecord is looking for a file with a different name than ''contact.rb'', and not finding it. So, try: has_many :contact, :class_name => ''Contact'' Alternately, you could rename the table and say: has_many :contacts
Derek Mailer wrote:> I''m having a spot of bother creating a ''has_many'' relationship between > two legacy database tables. The relationship is ''company'' table has many > linked records in the ''contact'' table. Iv''e used ''generate scaffold'' on > these tables and everything is fine. I then decided to define the > relationship in the relevant model classes... >I would be more verbose for those legacy tables: class Contact < ActiveRecord::Base set_table_name ''contact'' # unless pluralize_table_names if off belongs_to :company,:foreign_key => "companyid" end class Company < ActiveRecord::Base set_table_name ''company'' has_many :contacts, :class_name => ''Contact'', :foreign_key => ''companyid'' end
Lugovoi Nikolai wrote:> Derek Mailer wrote: >> I''m having a spot of bother creating a ''has_many'' relationship between >> two legacy database tables. The relationship is ''company'' table has many >> linked records in the ''contact'' table. Iv''e used ''generate scaffold'' on >> these tables and everything is fine. I then decided to define the >> relationship in the relevant model classes... >> > > I would be more verbose for those legacy tables: > > class Contact < ActiveRecord::Base > set_table_name ''contact'' # unless pluralize_table_names if off > belongs_to :company,:foreign_key => "companyid" > end > > class Company < ActiveRecord::Base > set_table_name ''company'' > has_many :contacts, :class_name => ''Contact'', :foreign_key => > ''companyid'' > endIt''s now fixed, thanks for the help! If you''re interested... contact.rb didn''t need changed and I''d already turned pluralize_table_names off and added ActiveRecord::Base.primary_key_prefix_type=:table_name to environment.rb I''d tried being verbose and setting the foreign_key in company.rb as you''ve suggested, but it was the additional :class_name => ''Contact'' that fixed the has_many relationship for me :) -- Posted via http://www.ruby-forum.com/.