Ruby on rails Rails已通过多项测试,具备了新的条件
我的用户和组织都有加入模式UsersOrganization。用户可能是组织的管理员-如果是,则is_admin布尔值为true 如果我在数据库中手动设置is_admin布尔值,Organizations.admins将按照我的预期工作Ruby on rails Rails已通过多项测试,具备了新的条件,ruby-on-rails,ruby-on-rails-3,has-many-through,Ruby On Rails,Ruby On Rails 3,Has Many Through,我的用户和组织都有加入模式UsersOrganization。用户可能是组织的管理员-如果是,则is_admin布尔值为true 如果我在数据库中手动设置is_admin布尔值,Organizations.admins将按照我的预期工作 在控制台中,我可以执行organization.first.users您可以尝试以下组织模型代码 class Organisation < ActiveRecord::Base has_many :organisations_users has_
在控制台中,我可以执行
organization.first.users您可以尝试以下组织模型代码
class Organisation < ActiveRecord::Base
has_many :organisations_users
has_many :organisations_admins, :class_name => "OrganisationsUser", :conditions => { :is_admin => true }
has_many :users, :through => :organisations_users
has_many :admins, :through => :organisations_admins, :source => :user
end
班级组织“组织用户”,:conditions=>{:is\u admin=>true}
拥有多个:用户,:至=>:Organizations\u用户
拥有多个:管理员,:通过=>:Organizations\u管理员,:source=>:user
结束
您始终可以覆盖在的has-many:to
和中存在一些曲折,确保的has-many:admins,:to=>代码>实际上用于选择,而不是插入数据。因此,当您执行organization.first.admin时,是否有任何方法可以执行organization.first.admins.create(:user=>user.first)
yes如果您在组织模型中使用一个小别名(请参见我编辑的答案),我最终为联接表创建了一个嵌套表单,但我接受了这个答案,因为它非常清楚地回答了我的问题。我更喜欢这个方法,因为它也解决了作业问题。
class Organisation < ActiveRecord::Base
has_many :organisations_users
has_many :organisations_admins, :class_name => "OrganisationsUser", :conditions => { :is_admin => true }
has_many :users, :through => :organisations_users
has_many :admins, :through => :organisations_admins, :source => :user
end
has_many :admins do
def <<(user)
user.is_admin = true
self << user
end
end
class User < ActiveRecord::Base
has_many :memberships
has_many :organisations, :through => :memberships
end
class Organisation < ActiveRecord::Base
has_many :memberships
has_many :members, :through => :memberships, :class_name => 'User', :source => :user
# response to comment:
def admins
memberships.admin
end
end
class Memberships < ActiveRecord::Base
belongs_to :organisation
belongs_to :user
scope :admin, where(:is_admin => true)
end
Organisation.first.memberships.admin.create(:user => User.first)