rails 3 принимает вложенные атрибуты, которые не работают

Я пытаюсь использовать вложенные атрибуты в моей пользовательской модели для настроек, чтобы я мог редактировать информацию о пользователе и информацию о настройках на одной странице. Вот мой код:

Пользователь.rb

has_one :settings
accepts_nested_attributes_for :settings, :allow_destroy => true
attr_accessor :settings_attributes

просмотры/пользователи/регистрации/edit.html.erb

<%= f.fields_for :settings do |s| %>
<p>
  <%= s.label :newsletter %><br />
  <%= s.check_box :newsletter %>
</p>
<% end %>

Это, казалось бы, работает просто отлично, форма отображается правильно. Однако атрибуты настроек вообще не меняются, когда я отправляю форму.

Я использую Rails 3, и Devise создал мою пользовательскую модель. Возможно, я упустил что-то, что должно быть в модели контроллера?


person goddamnyouryan    schedule 10.04.2011    source источник


Ответы (1)


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

модель

has_one :setting
accepts_nested_attributes_for :setting, :allow_destroy => true

просмотреть

<%= f.fields_for :setting do |s| %>

Для чего вы используете attr_accessor?

person johnmcaliley    schedule 10.04.2011
comment
фактическая модель называется settings.rb. Я использовал attr_accesor, потому что если я этого не сделаю, я получу следующее: irb(main):002:0> user.settings_attributes NoMethodError: неопределенный метод `settings_attributes' для #‹User:0x102d7fe80› - person goddamnyouryan; 10.04.2011
comment
никогда не работал. закончилось просто созданием новой модели и обработкой всего этого через контроллер - person goddamnyouryan; 14.04.2011
comment
Извините, кажется, я пропустил ваш первый комментарий. Я все еще думаю, что это имеет какое-то отношение к множественному и единственному числу, поскольку название вашей модели множественное. Но если вы довольны тем, что оставили имя модели в качестве настроек, то я думаю, что ваше решение, вероятно, будет правильным, чтобы избежать каких-либо проблем с тем, как Rails обрабатывает это. - person johnmcaliley; 14.04.2011