【发布时间】:2012-08-22 22:15:27
【问题描述】:
我的用户和组织具有加入模型 UsersOrganisation。用户可能是组织的管理员 - 如果是这样,is_admin 布尔值为真。
如果我在数据库中手动设置 is_admin 布尔值,Organisations.admins 会按我的预期工作。
在控制台中,我可以执行Organisation.first.users << User.first,它会按照我的预期创建一个 organizations_users 条目。
但是,如果我执行Organisation.first.admins << User.last,它会创建一个普通用户,而不是管理员,即连接表上的 is_admin 布尔值设置不正确。
除了直接在连接表中创建条目之外,还有其他好的方法吗?
class User < ActiveRecord::Base
has_many :organisations_users
has_many :organisations, :through => :organisations_users
end
class Organisation < ActiveRecord::Base
has_many :organisations_users
has_many :users, :through => :organisations_users
has_many :admins, :through => :organisations_users, :class_name => "User",
:source => :user,
:conditions => {:organisations_users => {:is_admin => true}}
end
class OrganisationsUser < ActiveRecord::Base
belongs_to :organisation
belongs_to :user
end
【问题讨论】:
-
确保
has_many :admins, :through => ... ...确实适用于选择,而不是插入数据。所以当你在做Organisation.first.admin << User.last时,它只是在创建普通条目。但是,我想知道如何做到这一点。谢谢你的问题。
标签: ruby-on-rails ruby-on-rails-3 has-many-through