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
| 归档时间: |
|
| 查看次数: |
8514 次 |
| 最近记录: |