【发布时间】:2010-02-17 18:01:06
【问题描述】:
我有一个使用has_many => :through 的典型多对多关系,如下所述。
class member
has_many member_roles
has_many roles, :through => :member_roles
end
class role
has_many member_roles
has_man members, :through => :member_roles
end
class member_role
belongs_to :member
belongs_to :role
# has following fields: member_id, role_id, scope, sport_id
end
我在这里尝试做的是允许为成员分配角色。每个成员角色都有一个范围,默认情况下设置为“全部”,但如果需要,可以设置为“运动”。如果范围设置为运动,那么我们还捕获了 sport_id,它允许我们将对该角色的评估限制为特定运动(即,只能管理该运动的团队,而不是每个运动的团队)。听起来很简单。
我已经设置了类似这样的update_member_roles 操作:
def update
# Assume we passing a param like: params[:member][:roles]
# as an array of hashes consisting of :role_id and if set, :sport_id
roles = (params[:member] ||= {}).delete "roles"
@member.roles = Role.find_all_by_id(roles.map{|r| r["role_id"]})
if @member.update_attributes params[:member]
flash[:notice] = "Roles successfully updated."
redirect_to member_path(@member)
else
render :action => "edit"
end
end
上面的工作足够好,它设置了适当的 member_roles 非常好......但是当我正在研究 Role 模型而不是 MemberRole 模型时,我有点不知道如何访问加入模型设置 :scope 和 :sport_id。
这里的任何指针将不胜感激。
【问题讨论】:
标签: ruby-on-rails ruby activerecord many-to-many has-many-through