3

クラス能力を定義せずにcancanでインスタンス能力を定義するにはどうすればよいですか?

classではなく、特定のインスタンスの:manageアクションを許可したい。CourseCourse

# ability.rb
can :manage, Course do |course|
  # Check if the user is a helper for this course
  CourseRole.get_role(user, course) == "helper"
end

これは、インスタンス変数に対してはうまく機能します:

# some_view.rb
can? :manage, @course # checks the instance to see if :manage is allowed

しかし、私がこれを行うと:

# some_view.rb
can? :manage, Course 

常に true を返しますが、これは悪いことです。

いくつかのコンテキスト:

class User < ActiveRecord::Base
  has_many :course_roles
  has_many :courses, :through => :course_roles
  ...
class CourseRoles < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
  ...
class Courses < ActiveRecord::Base
  has_many :course_roles
  has_many :users, :through => :course_roles
4

1 に答える 1

2

の代わりにcan? :manage, Course、新しいコースオブジェクトを使用can? :manage, Course.newして、ability.rbで渡したブロックに失敗することを確認できます。

于 2013-02-19T02:44:08.850 に答える