結合モデル 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