В моем приложении у Пользователя есть много Проектов. Я хочу создать, "добавьте много проектов" форма, таким образом, Пользователь может создать много Проектов сразу.
Мне казалось, что самый быстрый путь состоял в том, чтобы заставить Пользователя сформироваться с полями Project, вложенными в нем и опустить поля User. Таким образом, когда форма отправлена, Пользователь, сохраняется, и все новые записи Проекта создаются автоматически.
Однако я не хочу существующие Проекты показать в форме. Только пустые поля для нового проекта, который создается (из @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%>
Я использую сложный пример форм Ryan Bate. Код хорошо работает. Я просто хочу опустить существующие проекты от разоблачения в этой форме.
Вы можете использовать метод 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 %>
Вы можете попробовать
<% f.fields_for :project, Project.new do |project_form| %>
<%= render :partial => 'project', :locals => {:f => project_form} %>
<% end %>
это должно дать вам пустые поля для одной записи.
В контроллере вы можете создать несколько записей для отношений
5.times { @user.projects.build }
Это создаст пять новых пустых проектов, связанных с пользователем, и ваши текущие fields_for будут иметь поля для новых записей.