Ruby on rails 可以在CanCan中调用能力范围内的其他类实例吗?

Ruby on rails 可以在CanCan中调用能力范围内的其他类实例吗?,ruby-on-rails,cancan,Ruby On Rails,Cancan,问题是我有两个模型-Project和Ticket(属于Project)。我想在项目到期时拒绝访问票证创建(即,我希望用户无法为过期项目创建新票证) 我如何才能拒绝在CanCan功能中为用户创建票证? 差不多 if user.role? :superuser can :read, :all can :create, Ticket do |ticket| ticket.project.expired? end end 问题是“项目”方法没有在任何地方定义。 我非常感谢您的帮助。

问题是我有两个模型-Project和Ticket(属于Project)。我想在项目到期时拒绝访问票证创建(即,我希望用户无法为过期项目创建新票证)

我如何才能拒绝在CanCan功能中为用户创建票证? 差不多

if user.role? :superuser
  can :read, :all
  can :create, Ticket do |ticket|
    ticket.project.expired?
  end
end
问题是“项目”方法没有在任何地方定义。
我非常感谢您的帮助。

在授予许可之前,您只需测试潜在票证的项目是否已过期。关键是对项目授予的是权限,而不是票证

为此,我可能会定义一种特殊的能力

if user.role? :superuser
  can :read, :all
  can :create_ticket_for_project, Project do |project|
    !project.expired?
  end
end
然后在控制器中使用:

authorize! :create_ticket_for_project, @project

这实际上解决了我的问题。谢谢。我不认为CanCan能力中的动作可以和controller中的动作命名不同。