Ruby on rails 使用CanCan限制关系中的项目数量

Ruby on rails 使用CanCan限制关系中的项目数量,ruby-on-rails,cancan,Ruby On Rails,Cancan,表单属于用户组。某些角色不能创建多个表单,每个用户组键入“改进点”。我想用CanCan(1.6.x)实现这一点。但是怎么做呢 在我看来,我想说: link_to("New Form", new_form_path) if can? :create, Form, @user_group 或者类似的东西,比如Form.new(:user\u group=>@user\u group)就可以了 my ability.rb中的相关部分: class Ability include CanCan::

表单
属于
用户组
。某些角色不能创建多个
表单
,每个
用户组
键入“改进点”。我想用CanCan(1.6.x)实现这一点。但是怎么做呢

在我看来,我想说:

link_to("New Form", new_form_path) if can? :create, Form, @user_group
或者类似的东西,比如
Form.new(:user\u group=>@user\u group)
就可以了

my 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
问题是我不知道如何在上下文中传递 用户\组\ id。我已经尝试过,但这似乎不适用于我的情况,因为我需要专门检查要创建的项目数量


cancan是正确的工具吗?我已经在
表单模型上进行了一些验证
,以在较低的级别上实施每个组的这种行为;我应该问一下表单模型而不是能力吗?

也许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