这是我的模型:
团队:
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
通过同一张表连接的。请注意,要成为 a team.admin
,您必须是team.user
.
我的问题是,is_admin
当我追加到时如何自动保存在 joiner-model 中team.admins
?IE:
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 条件。但我不确定木匠模型是否属于这种情况?或者也许我做错了并且有更好的实现?
更新
这个问题似乎与这个问题非常相似。