Kevin Fullerton
2005-Jun-08 15:20 UTC
Joins - belongs_to and has_and_belongs_to_many in same class?
Hi, Probably a newbie question, but I''ve got the following setup for a Rails application at the moment Ruby 1.8.2, Rails 0.12.1, Debian unstable, Apache mod_rewrite/FastCGI Table: members CREATE TABLE `members` ( `id` int(11) NOT NULL auto_increment, `organisation_id` int(11) default NULL, `username` varchar(32) NOT NULL default '''', `password` varchar(128) NOT NULL default '''', `displayname` varchar(255) NOT NULL default '''', `title` varchar(255) default NULL, `email` varchar(255) NOT NULL default '''', `isadmin` int(11) NOT NULL default ''0'', `comments` text, `created_on` datetime NOT NULL default ''0000-00-00 00:00:00'', `updated_on` datetime NOT NULL default ''0000-00-00 00:00:00'', PRIMARY KEY (`id`), ) TYPE=InnoDB; table: projects CREATE TABLE `projects` ( `id` int(11) NOT NULL auto_increment, `organisation_id` int(11) NOT NULL default ''0'', `member_id` int(11) NOT NULL default ''0'', `projectname` varchar(255) NOT NULL default '''', `created_on` datetime NOT NULL default ''0000-00-00 00:00:00'', `updated_on` datetime NOT NULL default ''0000-00-00 00:00:00'', PRIMARY KEY (`id`) ) TYPE=InnoDB; table: members_projects CREATE TABLE `members_projects` ( `member_id` int(11) NOT NULL default ''0'', `project_id` int(11) NOT NULL default ''0'' ) TYPE=InnoDB; I''ve got models/controllers/views for member and project. The problem I''ve got is I want the member_id in projects to hold the owner, but also list the people who are involved in the project via the members_projects table. model: member class Member < ActiveRecord::Base validates_uniqueness_of :username validates_uniqueness_of :email belongs_to :organisation has_many :project has_and_belongs_to_many :project def self.authenticate(username,password) find(:first, :conditions => ["username = ? and password ?",username,password]) end end model: project class Project < ActiveRecord::Base belongs_to :organisation belongs_to :member has_and_belongs_to_many :member end This gives me an Action Controller Exception - before the has_and_belongs_to_many were added it was working fine. Question is, can I get it working like this with just a change to the model, or can I rename member_id to owner_id in the table and change the model/views to support this, or is there another way of doing it that''s better? Cheers Kevin
Stephan Oehlert
2005-Jun-08 15:47 UTC
Re: Joins - belongs_to and has_and_belongs_to_many in same class?
> > I''ve got models/controllers/views for member and project. The problem > I''ve got is I want the member_id in projects to hold the owner, but also > list the people who are involved in the project via the members_projects > table. > > model: member > > class Member < ActiveRecord::Base > validates_uniqueness_of :username > validates_uniqueness_of :email > belongs_to :organisation > has_many :project > has_and_belongs_to_many :project > def self.authenticate(username,password) > find(:first, :conditions => ["username = ? and password > ?",username,password]) > end > end > > model: project > > class Project < ActiveRecord::Base > belongs_to :organisation > belongs_to :member > has_and_belongs_to_many :member > end > > This gives me an Action Controller Exception - before the > has_and_belongs_to_many were added it was working fine. Question is, can > I get it working like this with just a change to the model, or can I > rename member_id to owner_id in the table and change the model/views to > support this, or is there another way of doing it that''s better? >I think you could do class Owner < Member has_many :projects end class Member habtm :projects end class Project habtm :members, :foreign_key => "project_id" belongs_to :owner, :foreign_key => "owner_id" end This would differentiate between the roles of a member and should eliminate the exception. stephan
Kevin Fullerton
2005-Jun-09 08:57 UTC
Re: Joins - belongs_to and has_and_belongs_to_many in same class?
Thanks for your help, that worked a treat! Kevin> I think you could do > > class Owner < Member > has_many :projects > end > > class Member > habtm :projects > end > > class Project > habtm :members, :foreign_key => "project_id" > belongs_to :owner, :foreign_key => "owner_id" > end > > This would differentiate between the roles of a member and should > eliminate > the exception. > > stephan > >