Как обновить определенные атрибуты из ограниченной модели с помощью Best_In_Place и Cancan

Как может сказать, что «учитель» обновляет только определенный атрибут модели (скажем, модель «книга»), в то время как он / она не может обновлять другие атрибуты этой модели при использовании как Cancan, так и Best_In_Place. Я понимаю, что авторизация атрибутов еще не поддерживается в Cancan, поскольку она все еще находится в разработке в версии 2.0, поэтому первое, что я подумал, это использовать что-то вроде этого:

cannot :all, Book
if is_teacher?
    can :update_certain_attribute, Book
end

Но поскольку я хотел использовать Best_In_Place, мои предварительные исследования говорят мне, что я могу использовать только атрибуты для обновления Best_In_Place, как показано ниже.

<%= best_in_place @book, :certain_attribute, :type => :input %>

а не методы:

<%= best_in_place @book, :update_certain_attribute, :type => :input %>

Как лучше всего справиться с этим? Спасибо :)


person Jay-Ar Polidario    schedule 14.01.2014    source источник


Ответы (1)


Обновлено, поскольку речь идет о двух вещах.

Это гарантирует, что переменная доступна по атрибуту, и поэтому, если она обновляется, используется best_in_place, модель/контроллер не позволит фактическому обновлению переменной.

Для этого, я думаю, вам нужно посмотреть доступный динамический атрибут. У Райана есть хороший актерский состав здесь http://railscasts.com/episodes/237-dynamic-attr-accessible

Чтобы иметь условие с использованием канкана на best_in_place, вы можете использовать следующий код

опять же, это не помогает для конкретного атрибута, но в сочетании с доступным динамическим атрибутом гарантирует, что переменная не будет изменена.

person Michael Moulsdale    schedule 14.01.2014
comment
Хммм, я немного запутался, как я мог реализовать это в этом :) Краткий взгляд на это заставляет меня думать, что я больше не буду использовать best_in_place... или я ошибаюсь? :) В любом случае, спасибо, я проверю это позже дома :) - person Jay-Ar Polidario; 14.01.2014