Предотвратить обновление определенных свойств? - PullRequest
5 голосов
/ 06 октября 2010

В rails, при обновлении модели, как вы препятствуете обновлению определенных свойств модели при использовании вызова, подобного:

@user.update_profile params[:user]

Поскольку любой может просто создать вход формы с именем, например«пароль», как вы можете отфильтровать набор свойств, которые вы разрешаете обновлять?

Для этого предназначен attr_XXX?

Ответы [ 2 ]

6 голосов
/ 06 октября 2010

Вы ищете attr_accessible.Он позволяет вам указать, какие атрибуты могут быть установлены посредством массового обновления (например, update_attributes), но вы все равно сможете устанавливать атрибуты «вручную» (например, @user.attribute = ...).

Для получения дополнительной информациисм. Важность attr_accessible в Ruby on Rails .

4 голосов
/ 06 октября 2010

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

class User < ActiveRecord::Base
  attr_protected :password
end 

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

NB Защищенные атрибуты все еще могут быть перезаписаны, если они напрямую назначены как в

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