我有以下型号
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设置为trueproject.project_members.first.admin = true
并保存项目,它不会更新表中的属性。
我做错了什么? (请记住,我是红宝石和铁轨的初学者)
我一直在谷歌搜索最后几个小时找到解决方案但找不到任何东西:/
答案 0 :(得分:2)
我认为您必须将管理员关联更改为:
has_many :admins, :through => :project_members, :uniq => true, :conditions => {:project_members => {:admin => true}}, :class_name => "User", :source => :user
我希望这会对你有帮助。