Ruby on rails Rails已通过多项测试,具备了新的条件

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_

我的用户和组织都有加入模式UsersOrganization。用户可能是组织的管理员-如果是,则is_admin布尔值为true

如果我在数据库中手动设置is_admin布尔值,Organizations.admins将按照我的预期工作


在控制台中,我可以执行
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)