Tak jak powiedziałem, uważamy, że najlepszym sposobem ograniczenia atrybutów do określonych ról jest użycie klejnotu, który DHH wprowadził niedawno. To również będzie częścią Rails4 na szczęście.
Nawet jeśli nie pasuje, dobrze jest rozpocząć integrację zasad, ponieważ ułatwi to aktualizację Railsów od 3 do 4.
Jeśli masz członkostwo Railscasts Pro, Ryan Bates wykonał na nim kolejny fantastic tutorial.
W skrócie, oto co jest zalecane w tym Railscast.
Po zainstalowaniu klejnotu, usuń attr_accessible ze swojego modelu.
Dodaj to do inicjowania obiektu:
ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection)
zmień swoje działania aktualizacji w kontrolerze ::
def update
@topic = Topic.find(params[:id])
if @topic.update_attributes(topic_params)
redirect_to topics_url, notice: "Updated topic."
else
render :edit
end
end
utworzyć prywatną metody w kontrolerze:
def topic_params
if current_user && current_user.admin?
params[:topic].permit(:name, :sticky)
else
params[:topic].permit(:name)
end
end
W Twojej sytuacji, tak jak my, musisz zmienić metodę topic_params, aby użyć swoich ról.
W RailsCast jest jeszcze kilka sugestii i naprawdę warte 9 $! (Nie jestem w żaden sposób związany z witryną, jest to dla nas bezcenne)
Daj mi znać, jeśli to pomoże.
Co słychać w głosowaniu i na zakończenie głosowania? Chcesz zaoferować wyjaśnienie? – marcamillion
Co zostało zainstalowane? Czy korzystasz z usługi Cancan i wymyślasz? Prawdopodobnie brak informacji. – simonmorley
@simonmorley Tak, CanCan & Devise. Przepraszamy, zaktualizuje pytanie. – marcamillion