2015-02-20 4 views
0

Мой routes.rb:CanCanCan разрешить связанные объекты

resources :users 
resources :clients do 
    resources :branches 
end 

У меня есть это в Ability.rb. Пользователь может обновлять только своих клиентов.

can [:update], Client, :id => user.clients.pluck(:id) 

Пользователь должен также иметь возможность: создавать, обновлять, показывать ветви, принадлежащие клиенту. Он может выглядеть следующим образом:

can [:create, :update, :show], Branch, :client => { :id => user.clients.pluck(:id) } 

Он работает для: обновления,: show, но не для: create. Это связано с тем, что новая ветвь не имеет client_id перед созданием. Как это сделать: create?

ответ

0

Ваша текущая способность на самом деле не вызывает проверку поля внешнего ключа на ветке. Использование вложенности вроде этого вызывает эквивалент client.id вместо client_id, как вы хотите.

Следует читать:

can [:create, :update, :show], Branch, client_id: user.client_ids

или, оставаясь в соответствии с вашим стилем:

can [:create, :update, :show], Branch, client_id: user.clients.pluck(:id)

Смежные вопросы