Strong Params, Nested Attributes и Mongoid, похоже, не работают из-за суффикса *_attributes в форме?

Я пытаюсь внедрить группы свойств в свою основную модель Person, чтобы помочь организовать мой код, но Strong Params в Rails 4 мешает.

Сценарий

У меня есть модель Person и модель PersonName вот так:

class Person
  include Mongoid::Document
  embeds_one :name, class_name: 'PersonName'
  accepts_nested_attributes_for :name
end

class PersonName
  include Mongoid::Document
  embedded_in :person, inverse_of: :name
  # fields here
end

Затем я использую помощник fields_for в своей форме, чтобы вложить атрибуты PersonName в Person _form:

<%= f.fields_for :name, PersonName.new do |builder| %>
  <!-- etc -->

и, наконец, я разрешаю атрибуты имени в контроллере, чтобы Strong Params разрешал вложенные атрибуты через:

def person_params
  params.require(:person).permit(:name)
end

Эта проблема

Это не работает, и я получаю ошибку Unpermitted parameters: name_attributes. Что происходит, так это то, что когда я вызываю f.fields_for :name ..., "_attributes" добавляется к полям в HTML-форме. например Если у меня есть поле first_name то форма выглядит так:

<input name="person[name_attributes][first_name] ...>

вместо:

<input name="person[name][first_name] ...>

Насколько я могу судить, это предполагаемое поведение, поэтому похоже, что метод .permit не работает.

Попытки обходного пути

Я попытался изменить строку Strong Params на:

params.require(:person).permit(:name_attributes)

но это не работает. Использование permit! действительно работает, но мне это не нравится, поскольку, насколько я могу судить, это полный антишаблон.

Я также пытался изменить :name везде на :name_attributes, кроме помощника f.fields_for, так как форма HTML теперь имела свойство, которое действительно существовало в моей модели. К сожалению, это привело к тому, что f.fields_for :name выдало ошибку, говорящую, что :name не является допустимым свойством.


person Dave    schedule 30.08.2013    source источник
comment
Пожалуйста, смотрите ответ здесь рельсы 4"> stackoverflow.com/questions/17371334/   -  person Pierre-Louis Gottfrois    schedule 30.08.2013


Ответы (1)