I have a question about a has_many + belongs_to relationship and how ActiveRecord works. Consider two tables and related model classes: create_table :projects do |t| t.column :description, :text t.column :fm_project_id, :integer end create_table :fm_project_divs do |t| t.column :project_id, :integer t.column :cat_id, :integer t.column :name, :string end The projects table (class Project) has the rails standard ''id'' primary key. The fm_project_divs table (class FmProjectDiv) does NOT - it''s a legacy table and it actually has a composite key (project_id + cat_id), but not defined here. Apparently there is a required add-on to rails to support composite keys... A Project has_many fm_project_divs, and it is associated to the fm_project_divs table by fm_project_id (of Project) mapping to project_id (of FmProjectDiv). Here are the model classes: class Project < ActiveRecord::Base has_many :fm_project_divs, :class_name => "FmProjectDiv", foreign_key => "project_id" end class FmProjectDiv < ActiveRecord::Base belongs_to :project, :class_name => "Project", :foreign_key => :fm_project_id end In experimenting with this, has_many on Project attempts to collect fm_project_div records using ''id'' (primary key) matching on ''project_id'', which isn''t what I need. I''m able to get around this by: has_many :fm_project_divs, :class_name => "FmProjectDiv", :finder_sql => ''SELECT * FROM fm_project_divs WHERE project_id #{fm_project_id}'' Is this very basic relationship not possible (without using finder_sql) be/c rails demands a primary key defined for FmProjectDiv? Would this work as expected if the composite key add-on were used? thanks, bob -- Posted via ruby-forum.com. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Your question is more advanced than I can answer but the first part caught my attention. I created a project a while back that had a special ID column. To make the migration work right I had to use: ====++++===class CreatePeople < ActiveRecord::Migration def self.up create_table :people, :primary_key => :contactid do |t| # the line above creates a table with contactid as the primary key # no traditional id column # see the person Model for more about setting the primary key to something besides id t.column :address1, :string t.column :address2, :string t.column :address3, :string t.column :city, :string t.column :company, :string ====++++=== Then in the Person model it states: set_primary_key :contactid == I have no idea if this will help. Sunny On 9/16/07, Bob Daly <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > I have a question about a has_many + belongs_to relationship and how > ActiveRecord works. Consider two tables and related model classes: > > create_table :projects do |t| > t.column :description, :text > t.column :fm_project_id, :integer > end > > create_table :fm_project_divs do |t| > t.column :project_id, :integer > t.column :cat_id, :integer > t.column :name, :string > end > > > The projects table (class Project) has the rails standard ''id'' primary > key. > The fm_project_divs table (class FmProjectDiv) does NOT - it''s a legacy > table and it actually has a composite key (project_id + cat_id), but not > defined here. > Apparently there is a required add-on to rails to support composite > keys... > > > A Project has_many fm_project_divs, and it is associated to the > fm_project_divs table by fm_project_id (of Project) mapping to > project_id (of FmProjectDiv). > > Here are the model classes: > class Project < ActiveRecord::Base > has_many :fm_project_divs, :class_name => "FmProjectDiv", > foreign_key => "project_id" > end > > class FmProjectDiv < ActiveRecord::Base > belongs_to :project, :class_name => "Project", > :foreign_key => :fm_project_id > end > > > In experimenting with this, has_many on Project attempts to collect > fm_project_div records using ''id'' (primary key) matching on > ''project_id'', which isn''t what I need. > > I''m able to get around this by: > has_many :fm_project_divs, > :class_name => "FmProjectDiv", > :finder_sql => ''SELECT * FROM fm_project_divs WHERE project_id > #{fm_project_id}'' > > > Is this very basic relationship not possible (without using finder_sql) > be/c rails demands a primary key defined for FmProjectDiv? Would this > work as expected if the composite key add-on were used? > > > thanks, > bob > -- > Posted via ruby-forum.com. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
You might want to check out and use: compositekeys.rubyforge.org Maurice Fäh On 17 Sep., 06:10, "sunny beach" <sunnybeach1...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Your question is more advanced than I can answer but the first part caught > my attention. > > I created a project a while back that had a special ID column. To make the > migration work right I had to use: > > ====++++===> class CreatePeople < ActiveRecord::Migration > def self.up > create_table :people, :primary_key => :contactid do |t| > > # the line above creates a table with contactid as the primary key > # no traditional id column > # see the person Model for more about setting the primary key to something > besides id > t.column :address1, :string > t.column :address2, :string > t.column :address3, :string > t.column :city, :string > t.column :company, :string > > ====++++===> > Then in the Person model it states: > set_primary_key :contactid > > ==> > I have no idea if this will help. > > Sunny > > On 9/16/07, Bob Daly <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > > > > > I have a question about a has_many + belongs_to relationship and how > > ActiveRecord works. Consider two tables and related model classes: > > > create_table :projects do |t| > > t.column :description, :text > > t.column :fm_project_id, :integer > > end > > > create_table :fm_project_divs do |t| > > t.column :project_id, :integer > > t.column :cat_id, :integer > > t.column :name, :string > > end > > > The projects table (class Project) has the rails standard ''id'' primary > > key. > > The fm_project_divs table (class FmProjectDiv) does NOT - it''s a legacy > > table and it actually has a composite key (project_id + cat_id), but not > > defined here. > > Apparently there is a required add-on to rails to support composite > > keys... > > > A Project has_many fm_project_divs, and it is associated to the > > fm_project_divs table by fm_project_id (of Project) mapping to > > project_id (of FmProjectDiv). > > > Here are the model classes: > > class Project < ActiveRecord::Base > > has_many :fm_project_divs, :class_name => "FmProjectDiv", > > foreign_key => "project_id" > > end > > > class FmProjectDiv < ActiveRecord::Base > > belongs_to :project, :class_name => "Project", > > :foreign_key => :fm_project_id > > end > > > In experimenting with this, has_many on Project attempts to collect > > fm_project_div records using ''id'' (primary key) matching on > > ''project_id'', which isn''t what I need. > > > I''m able to get around this by: > > has_many :fm_project_divs, > > :class_name => "FmProjectDiv", > > :finder_sql => ''SELECT * FROM fm_project_divs WHERE project_id > > #{fm_project_id}'' > > > Is this very basic relationship not possible (without using finder_sql) > > be/c rails demands a primary key defined for FmProjectDiv? Would this > > work as expected if the composite key add-on were used? > > > thanks, > > bob > > -- > > Posted viahttp://www.ruby-forum.com.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---