Как да актуализирате конкретни атрибути от ограничен модел с помощта на 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)


Актуализирано като говорим за 2 неща

Това ще гарантира, че променливата е достъпна за атрибути и така, ако се актуализира, използва best_in_place, моделът/контролерът няма да позволи променливата да бъде действително актуализирана

За това мисля, че ще трябва да разгледате достъпния динамичен атрибут. Райън има добър актьорски състав за това тук http://railscasts.com/episodes/237-dynamic-attr-accessible

За да имате условие, използвайки cancan на best_in_place, можете да използвате следния код

отново това не помага за конкретен атрибут, но във връзка с достъпен динамичен атрибут ще гарантира, че променливата няма да бъде променена

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