2

一个Formbelongs_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吗?

4

1 回答 1

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
于 2013-07-06T15:57:28.390 回答