我有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时,这会中断。我真的无法禁用此功能,因为我有点担心人们可以编辑表单以将其角色升级为领导者。
任何提示?
答案 0 :(得分:0)
您是否考虑过使用before_save过滤器来保护不应该访问它的用户的“角色”字段?这样你可以不用attr_protected
。
在我正在处理的应用程序中,我们使用设计和自定义权限设置,并在保存之前立即检查选择字段的权限。