Rails 3:与条件的多对多关系

时间:2011-02-14 19:01:07

标签: ruby ruby-on-rails-3 many-to-many


我有以下型号

class Project < ActiveRecord::Base
  has_many :project_members
  has_many :members, :through => :project_members, :uniq => true,:class_name => "User",  :source => :user
  has_many :admins, :through => :project_members, :uniq => true, :conditions => ['project_members.admin = ?', true], :class_name => "User", :source => :user

end

class User < ActiveRecord::Base
  # References
  has_many :project_members
  has_many :projects, :through => :project_members

end

和联接表

class ProjectMember < ActiveRecord::Base
    belongs_to :project
    belongs_to :user
end

关系似乎有效,但是当我想通过此代码向项目添加管理员时

project.admins.push(u)
project.save

(其中u是用户)它保存新关系,但没有在连接表中将admin设置为true。

即使我从项目中检索此关系并通过执行

手动将admin设置为true
project.project_members.first.admin = true

并保存项目,它不会更新表中的属性。

我做错了什么? (请记住,我是红宝石和铁轨的初学者)
我一直在谷歌搜索最后几个小时找到解决方案但找不到任何东西:/

1 个答案:

答案 0 :(得分:2)

我认为您必须将管理员关联更改为:

has_many :admins, :through => :project_members, :uniq => true, :conditions => {:project_members => {:admin => true}}, :class_name => "User", :source => :user

我希望这会对你有帮助。