【发布时间】:2011-10-13 11:06:15
【问题描述】:
我正在开发一个具有User 和Project 模型的应用程序,User 可以通过ProjectUser 分配给多个Projects,具有角色(例如开发人员、设计师) .
Project
has_many :project_users
has_many :users, :through => :project_users
User
has_many :project_users
has_many :projects, :through => :project_users
ProjectUser (user_id, project_id, role)
belongs_to :user
belongs_to :project
我可以打电话给@project.users 和@user.projects,但由于角色不同,我想更具体一点的关系。理想情况下,我希望能够做到以下几点:
@project.developers
# returns @project.users, but only where ProjectUser.role = 'Developer'
@project.designers << @user
# creates a ProjectUser for @project, @user with role 'Designer'
@user.development_projects
# returns projects where @user is assigned as a 'Developer'
@user.design_projects << @project
# creates a ProjectUser for @project, @user with role 'Designer'
我目前有以下代码:
has_many :developers, :through => :project_users, :source => :user,
:class_name => "User",
:conditions => ['project_users.role = ?','Developer']
但这只是真正的单向获取,并没有给我太多其他东西 - 我无法构建或分配或任何东西。
我正在尝试一些我认为可能可行的更复杂的逻辑,但希望得到一些建议:
has_many :developer_assignments, :source => :project_user,
:conditions => { :role => 'Developer' }
has_many :developers, :through => :developer_assignments # class_name?
有什么建议吗?谢谢!
【问题讨论】:
标签: ruby-on-rails-3 activerecord arel