Rails has_many通过条件,构建新的

Edw*_*ard 4 ruby-on-rails has-many-through ruby-on-rails-3

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

如果我在数据库中手动设置is_admin布尔值,Organisations.admins就像我期望的那样工作.

在控制台中,我可以这样做Organisation.first.users << User.first,它会像我期望的那样创建一个organisations_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
Run Code Online (Sandbox Code Playgroud)

Ere*_*bih 5

您始终可以覆盖<<关联方法:

has_many :admins do

  def <<(user)
    user.is_admin = true
    self << user
  end

end
Run Code Online (Sandbox Code Playgroud)

(代码尚未检查)