Каково поведение rails mass assignment по умолчанию

#ruby-on-rails

#ruby-on-rails

Вопрос:

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

 rails g scaffold User name:string email:string
  

Действие создания будет таким по умолчанию:

 def create
  @user = User.new(params[:user])
  respond_to do |format|
    if @user.save
      ...
    else
      ...
    end
  end
end
  

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

Ответ №1:

По умолчанию в Rails разрешено массовое присвоение любых атрибутов базы данных, вам не нужно будет определять это имя и строку электронной почты в контексте attr_accessible, чтобы они могли быть назначены массово.

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

Аналогично, attr_protected используется для определения черного списка атрибутов, которые нельзя использовать при массовом присвоении.

Однако ничего из этого не произойдет, если вы не определите эти свойства, поэтому ваш код отлично работает без attr_accessible. Я лично предпочитаю подход с белым списком по сравнению с подходом с черным списком просто потому, что он намного безопаснее. Хотя ваше приложение работает без attr_accessible, в конце концов, рекомендуется использовать их в любом случае в качестве меры предосторожности.

Комментарии:

1. Не мог бы сказать это лучше. Отличное описание @Ken Li