Lee*_*vis 12 ruby-on-rails associations has-many has-many-through belongs-to
我有一个User
模型,它有很多projects
,Project
模型可以有很多users
,但也属于一个用户(即创建这个项目的用户).它必须属于一个User
.它还允许用户列表与之关联,并考虑协作.
考虑到这一点,我的模型看起来像这样:
class User < ActiveRecord::Base
has_many :assigned_projects
has_many :projects, :through => :assigned_projects
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :assigned_projects
has_many :users, :through => :assigned_projects
end
class AssignedProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)
现在,当我想通过a创建一个新项目时User
,我就是这样做的:
user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')
Run Code Online (Sandbox Code Playgroud)
现在,我知道这projects
是通过AssignedProject
连接模型提供的,这就是为什么project.user
会返回nil
.我挣扎,围绕让我的头是分配该项目的创建者最好的方式(其中的方式并不需要是user
,它可能是creator
或别的东西,描述性的,只要它的类型User
).
接下来的想法是创建一个projects_created
从a User
中返回的方法,该方法只选择该用户创建的项目.其中user.projects
当然会返回一个用户相关联的所有项目.
假设这种关联相当普遍,那么实现我想要的最好方法是什么?任何方向都非常感谢.
Pav*_*ing 20
将creator_id列添加到项目表中以获取创建者关系,然后将关联添加到模型:
class User < ActiveRecord::Base
has_many :assigned_projects
has_many :projects, :through => :assigned_projects
has_many :created_projects, :class_name => "Project", :foreign_key => :creator_id
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :assigned_projects
has_many :users, :through => :assigned_projects
belongs_to :creator, :class_name => "User", :foreign_key => :creator_id
end
Run Code Online (Sandbox Code Playgroud)
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many