Смешивание новых и существующих детей в форме - PullRequest
0 голосов
/ 04 июня 2011

Я пытаюсь создать форму для своих пользователей, где они могут ввести до 3 адресов для себя. После создания адреса его можно пометить как неактивный, и он не будет засчитан в 3. Я использую accepts_nested_attributes_for :addresses в своей модели User, и я попробовал несколько вещей в своей форме, но не могу получить 1002 *, чтобы показать существующие адреса и новые адреса, когда существующие адреса ограничены.

Вот несколько вещей, которые я пробовал:

В контроллере:
(3 - @user.addresses.active.count).times { @user.addresses.build }

Это дает мне все существующие, активные адреса, но не новые:

<%= f.fields_for :addresses, @user.addresses.active do |address| %>
  <%= address.text_field :line_1 %>
<% end %>

Это дает мне существующие и новые адреса, но включает в себя неактивные:

<%= f.fields_for :addresses do |address| %>
  <%= address.text_field :line_1 %>
<% end %>

Есть ли способ объединить их, чтобы получить новые И ИХ Описанные записи?

1 Ответ

0 голосов
/ 05 июня 2011

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

Но в итоге я решил, что при передаче символа в fields_for (например: fields_for :addresses) будет использоваться область действия модели по умолчанию. Поэтому я установил default_scope where(:status => 'active') в своей модели адресов, и теперь fields_for будет отображать только поля для активных адресов и поля для новых адресов.

Мне также нужно было отсортировать эти адреса по дате их создания. Это стало возможным благодаря изменению сортировки по умолчанию для отношения has_many :addresses в пользовательской модели. Поэтому, хотя кажется, что нет способа явно указать, какие области использовать в параметрах для fields_for, существуют способы обойти это. Если кто-нибудь может объяснить, как это сделать, я с радостью отмечу этот ответ как правильный.

...