我有一个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
现在,当我想通过一个User
创建一个新的项目,这是我会怎么做:
user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')
现在,我知道projects
通过一个AssignedProject
提供加盟的模式,这就是为什么project.user
将返回nil
。我挣扎,围绕让我的头是分配项目创建者(其中的方式做的最好办法不是需要是user
,也可能是creator
或别的东西,描述性的,只要它的类型User
)。
然后,这个想法是创建一个方法,从User
返回projects_created
,它将只选择由该用户创建的项目。其中user.projects
当然会返回用户所关联的所有项目。
假设这种关联是相当常见的,什么是实现我想要的东西的最佳方式?任何方向都不胜感激。
感谢您的回答,但这不是我的问题。它是:*什么我挣扎,周围让我的头是分配项目创建者(其中的方式并不需要是用户的最佳途径,也可能是创作者还是其他什么东西的描述,只要它是类型的用户)。* –
@Nuby肯定什么?当然,我正努力让自己的头脑以自动化的方式将用户/创建者分配给项目?是的 –
除非我误读@ Pavling的回答(和你的问题),他所建议的是你与用户表创建第二种关系,称为'创造者'。然后你可以调用'Project.creator'从'CreatedProjects'关联中获取关联的用户。这将解决(我认为)你的问题。至于如何分配它,你可以在模型中做一个'before_create'钩子,将其分配给当前登录的用户或其他用户(取决于你的项目逻辑)。 – Nuby