一个Form
belongs_to UserGroup
。某些角色不能创建超过一个Form
,每个 'improvement_points' 类型UserGroup
。我想用 CanCan (1.6.x) 来实现它。但是怎么做?
在我的观点和控制器中,我想说:
link_to("New Form", new_form_path) if can? :create, Form, @user_group
或任何类似的东西,就像Form.new(:user_group => @user_group)
会做的那样。
我的ability.rb中的相关部分:
class Ability
include CanCan::Ability
def initialize(user)
if user.is_coach?
cannot :create, Form, :type => "improvement_points" do |form|
# Allow no more than one Form per group.
Form.where(:user_group_id => user_group.id).count > 0
end
end
end
end
问题是我不知道如何传递 user_group_id 的上下文。我已尝试对此进行Rianbs 描述,但这似乎不适用于我的情况,因为我需要专门检查要创建的项目数量。
cancan 是正确的工具吗?我已经进行了一些验证,Form model
以在较低级别上强制执行这种每组一个行为;我应该问Form模型而不是Ability吗?