Rails有很多,属于一个

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