Как указать поля для установки для acceptpts_nested_attributes_for в ActiveRecord - PullRequest
5 голосов
/ 22 января 2012

У меня есть что-то вроде:

class Profile < ActiveRecord::Base
   belongs_to :user    
   delegate :full_name, :to => :user

   accepts_nested_attributes_for :user
   .......

Это прекрасно работает, так как я хочу, чтобы профиль мог задавать first_name и last_name в пользователе.Но это создает угрозу безопасности, если пользователь вводит другие параметры в форму.

Как заставить acceptpts_nested_attributes_for принимать только first_name и last_name и удалять другие параметры?

1 Ответ

0 голосов
/ 19 апреля 2012

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

  1. acceptpts_nested_attributes_for будет уважать attrs_accessible в пользовательской модели. Если вы укажете, что атрибут не подвергается массовому назначению в пользовательской модели, он также не сможет быть назначен с помощью acceptpts_nested_attributes_for.

  2. Вы можете обрабатывать санитарные условия в вашем контроллере профилей. Атрибуты, которые будут переданы пользовательской модели, будут указаны в params [: profile] [: user_attributes]. Затем вы можете либо использовать slice, чтобы получить только те атрибуты, которые вы хотите разрешить, либо использовать except, чтобы удалить атрибуты, которые вы не хотите разрешать. Хотя я предпочитаю белый список разрешенных атрибутов по сравнению с черным списком.

Опция 1 будет влиять на то, где вы используете массовое назначение для пользовательской модели, тогда как опция 2 будет влиять только на параметры, поступающие через контроллер профилей

...