编写has_many:through with:条件关联因质量分配保护而失败

时间:2011-06-06 01:27:15

标签: ruby-on-rails activerecord associations has-many-through conditional-statements

我有3个类:Group和User,通过名为Membership的连接表连接。成员资格具有“角色”属性,告诉我们用户在群组中扮演的角色。

小组

has_many :leaderships, :class_name => 'Membership', :conditions => {:role => "leader"}
has_many :leaders, :through => :leaderships, :source => :user

这允许我说

g = group.new
g.leaders.build(:name => 'Tom')

通过Rails的魔力,我得到了这个SQL(以及向用户插入记录)

INSERT INTO `memberships` (`group_id`, `role`, `user_id`) VALUES (262, 'leader', 1291)

即它实际上知道用role =“leader”创建成员资格。乌拉。

但是,当我将“角色”设为attr_protected时,这会中断。我真的无法禁用此功能,因为我有点担心人们可以编辑表单以将其角色升级为领导者。

任何提示?

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用before_save过滤器来保护不应该访问它的用户的“角色”字段?这样你可以不用attr_protected

在我正在处理的应用程序中,我们使用设计和自定义权限设置,并在保存之前立即检查选择字段的权限。