Как опустить существующие дочерние записи во вложенной форме в рельсах? - PullRequest
6 голосов
/ 26 февраля 2010

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

Мне показалосьчто самым быстрым способом было создать пользовательскую форму с вложенными в нее полями Project и пропустить пользовательские поля.Таким образом, когда форма отправлена, пользователь сохраняется, и все новые записи проекта создаются автоматически.

Однако я не хочу, чтобы существующие проекты отображались в форме.Только пустые поля для нового создаваемого проекта (из @ user.projects.build).Есть ли параметр, который я могу передать или что-то, что я могу изменить в форме, чтобы пропустить существующие записи проекта?

<% form_for (@user) do |f| %>

   <% f.fields_for :project do |project_form| %>
      <%= render :partial => 'project', :locals => {:f => project_form}  %>
   <% end %>

   <%= add_child_link "New Project", f, :projects %>

   <%= f.submit "save" %> 

<%end%>

Я использую пример сложных форм Райана Бэйта.Код работает отлично.Я просто хочу не показывать существующие проекты в этой форме.

Ответы [ 2 ]

7 голосов
/ 26 февраля 2010

Вы можете использовать метод new_record?, чтобы различать вновь созданную запись и старую:

<% form_for @user do |f| %>
   <% f.fields_for :project do |project_form| %>
      <%= render :partial => 'project', :locals => {:f => project_form} if project_form.object.new_record? %>
   <% end %>
   <%= add_child_link "New Project", f, :projects %>
   <%= f.submit "save" %> 
<% end %>
1 голос
/ 26 февраля 2010

Вы можете попробовать

  <% f.fields_for :project, Project.new do |project_form| %>
    <%= render :partial => 'project', :locals => {:f => project_form}  %>
  <% end %>

, который должен дать вам пустые поля для одной записи.

В контроллере вы можете сгенерировать несколько записей для отношения

 5.times { @user.projects.build }

Это создаст пять новых пустых проектов, связанных с пользователем, и ваши текущие fields_for будут иметь поля для новых записей.

...