Защитите атрибуты, которые будут обновлены - PullRequest
0 голосов
/ 16 августа 2011

У меня есть веб-сайт RPG, и я хочу, чтобы пользователи могли указывать свое имя при регистрации, но не при редактировании своего профиля. Но я хочу как администратор, чтобы иметь возможность редактировать его.

Поскольку я использую update_attributes в действии update, я думаю, что они могут обновить свое имя, не используя классическую форму, которую я предоставляю.

Есть ли способ сделать это с помощью валидации ActiveRecord или просто в контроллере?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 августа 2011

Добавьте attr_accessible :name, :as => :admin к вашей User модели, и в контроллере регистрации используйте @user.update_attributes(params[:user], :as => :admin). Вместо действия update следует использовать @user.update_attributes(params[:user]) без опции :as => :admin.

Еще по этой теме: Обзор Rails 3.1

0 голосов
/ 16 августа 2011

Это проще сделать через контроллер, поскольку у контроллера есть доступ к вошедшему в систему пользователю.Итак, в вашем контроллере:

# When the form is submitted
unless @current_user.is_an_admin?
  # List of attributes to allow non-admins to change
  allowed_fields = %w[allowed_field_1 allowed_field_2]
  # Remove any non-allowed fields from the params
  params[:user].delete_if {|key, value| !allowed_fields.include?(key.to_s)}
end
@user.update_attributes(params[:user])

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...