Form
belongs_to UserGroup
。某些角色无法创建多个Form
,每个UserGroup
的类型为“improve_points”。我想用CanCan(1.6.x)实现这个。但是如何?
在我的观点和控制器中,我希望能够说:
link_to("New Form", new_form_path) if can? :create, Form, @user_group
或类似的任何内容,例如Form.new(:user_group => @user_group)
。
我的能力相关部分.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 description on this,但这似乎不适用于我的情况,因为我需要专门检查要创建的项目数量。
cancan是否是正确的工具?我已经在Form model
上进行了一些验证,以便在较低级别上执行每组一次的行为;我应该问Form模型而不是Ability?
答案 0 :(得分:0)
也许cancan可以做到这一点,但感觉就像是在推动它。我只是将这个逻辑放在控制器中。
def create
if condition_that_is_hard_to_write_in_ability_rb?
raise CanCan::AccessDenied, "Helpful message about what to do instead"
end
end