ここに私のモデルがあります:
チーム:
class Team < ActiveRecord::Base
has_many :team_users
has_many :users, through: :team_users
has_many :admins, through: :team_users,
foreign_key: :user_id,
class_name: 'User',
source: :user,
conditions: ["team_users.is_admin = ?", true]
end
ユーザー:
class User < ActiveRecord::Base
has_many :team_users
has_many :teams, through: :team_users
has_many :administered_teams, through: :team_users,
foreign_key: :user_id,
class_name: 'Team',
source: :team,
conditions: ["team_users.is_admin = ?", true]
end
チームユーザー:
# == Schema Information
#
# Table name: team_users
#
# id :integer not null, primary key
# team_id :integer
# user_id :integer
# is_admin :boolean
#
class TeamUser < ActiveRecord::Base
belongs_to :team
belongs_to :user
# Validations
validates_presence_of :team
validates_presence_of :user
attr_accessible :is_admin
end
したがって、本質的team.users
に とteam.admins
は同じテーブルを介して結合されます。team.admin
であるためには、 である必要があることに注意してくださいteam.user
。
is_admin
私の質問は、に追加するときに自動的にジョイナーモデルに保存するにはどうすればよいteam.admins
ですか? すなわち:
irb(main):001:0> user = User.find(1)
irb(main):002:0> team = Team.create
irb(main):003:0> team.admins << user
irb(main):004:0> team.users.count
=> 1
irb(main):005:0> team.admins.count
=> 0
irb(main):007:0> y team.team_users
- !ruby/object:TeamUser
attributes:
id: 307
team_id: 210
user_id: 1
is_admin:
=> nil
has_many 条件が自動的に設定されているのをどこかで漠然と見たのを覚えています。しかし、これが建具モデルに当てはまるかどうかはわかりませんか? それとも、私はそれを間違っていて、より良い実装がありますか?
アップデート
この質問は、この質問と非常に似ているようです。