Cancan как авторизовать модель коллекции в одном контроллере?

Я использую канкан с рельсами 4. У моей пользовательской модели много датировок, а у датировки много ответов. В действии show контроллера пользователя я хочу авторизовать их всех:

@user = User.find params[:id]
authorize! :read, @user

@datings = @user.first_page_datings
authorize! :read, @datings

# How to authorize replies of all the datings here?

Вопрос как авторизовать ответы всех знакомств здесь?


person xnjiang    schedule 03.09.2013    source источник
comment
Можешь попробовать это authorize! :read, Dating   -  person Sagar.Patil    schedule 03.09.2013
comment
Я думаю, вы предлагаете разрешить! :read, Ответить? Но таким образом он не может сказать, какой ответ авторизовать. Теперь я думаю, что это круговые знакомства и ответы авторизованных знакомств: @datings.each{|d|authorize! :читал, д.ответы}   -  person xnjiang    schedule 03.09.2013
comment
попробуй это authorize! :read, @datings.replies   -  person Sagar.Patil    schedule 03.09.2013


Ответы (1)


Вместо того, чтобы пытаться авторизовать все дочерние объекты, используйте @dating = @user.datings.accessible_by(current_ability) для загрузки разрешенных.

person graywh    schedule 26.09.2013
comment
Спасибо за ваш ответ! Рассмотрим такую ​​ситуацию: в ответном контроллере у меня есть действие index. Я получаю ответы от: @replies = @replyable.replies.accessible_by(current_ability) В шаблоне индекса я также хочу показать пользователю каждого @replies: то есть @replies.first.user. Понятно, что @replies.first.user еще не авторизованы. Любая мысль? - person xnjiang; 26.09.2013
comment
В этом случае я бы проверил способность в представлении: <%= reply.user if can?(:read, reply.user) %>. - person graywh; 26.09.2013