Определение способностей с помощью блока для индекса действия с CanCan и Ruby on Rails - PullRequest
1 голос
/ 05 июня 2011

Мне нужно добавить фильтр для пользователей.Пользователь может видеть других пользователей, только если он принадлежит к той же ветке.Один пользователь может принадлежать нескольким веткам.

Я определяю способности с помощью блоков ниже.Но после обращения к документации и сообщения об ошибке я узнал, что метод index не подходит для определения способности с помощью блока.

#This code is part of initialisation method of ability.rb

can :index, User do |curr_user|
    #check if user belongs to same branch
    !curr_user.branch_ids.index(branch_id).nil?
end

Вот метод индекса контроллера пользователя

def index
    authorize! :index, User

    @users = User.where(params[:user]).accessible_by(current_ability, :index)

    renders :obj =>@users
end

Какая альтернатива для определения способностей для реализации этой логики вместо определения способностей с блоками?

1 Ответ

1 голос
/ 14 июня 2011

accessible_by похоже на where для AR ...

Вы должны использовать хеш условий, а не блок, чтобы определить свою способность, см. Defining-Ab Способности

Что-то вроде ...

def initialize(user)
 conditions = branch_id: user.branch_id
 can :read, User, conditions
end

Я предлагаю вам сначала исправить спик conditions в консоли irb

user = User.first
User.where(branch_id: user.branch_id)

Тогда вам может потребоваться тест

...