Это защита от непреднамеренного массового назначения.
Проблема с кодом, который вы показали, состоит в том, что пользователи могут изменять форму и изменять атрибуты, которые вы не хотите, чтобы они изменяли, например, хешированные пароли для пользователей или опубликованный статус в сообщениях.
Вы можете использовать attr_protected
и attr_accessible
в моделях для защиты атрибутов в ваших моделях, которые необходимо переопределить. Когда атрибут защищен, значение из params
будет игнорироваться (уведомление появится в вашем журнале).
class Model < ActiveRecord::Base
attr_accessible :one, :two
end
До Rails 3.1 это было так. Не было способа настроить его потом. Теперь с Rails 3.1 вы можете назначать роли:
class Model < ActiveRecord::Base
attr_accessible :one, :two, :as => :admin
attr_accessible :one, :as => :regular_user
end
И укажите это при массовых обновлениях (new
или update_attributes
):
Model.new(params[:model], :as => :regular_user)
Использование :without_protection
сделает каждый атрибут свободным для назначения по массе и должен использоваться ОЧЕНЬ редко. Никогда не используйте, когда вы передаете данные пользователя. Например, вы можете использовать его в db/seeds.rb
.