Rails 3 Редактирование нескольких записей в одной форме - PullRequest
7 голосов
/ 08 декабря 2010

Я застрял на этой проблеме уже пару дней.

У меня есть некоторый успех с Railscasts Episode # 198, но это для Rails 2. В некоторых измененияхRails 3, которые делают так, чтобы код, предоставленный в Эпизоде ​​№ 198, не работал.

Проблема заключается в edit_individual.html.erb:

Оригинальный код (предоставленный Ryan @ Railscasts):

<% form_tag update_individual_products_path, :method => :put do %>
  <% for product in @products %>
    <% fields_for "products[]", product do |f| %>
      <h2><%=h product.name %></h2>
      <%= render "fields", :f => f %>
    <% end %>
  <% end %>
  <p><%= submit_tag "Submit" %></p>
<% end %>

Модифицированный код (просто изменил fields_for на form_for):

<% form_tag update_individual_products_path, :method => :put do %>
  <% for product in @products %>
    <% form_for "products[]", product do |f| %>
      <h2><%=h product.name %></h2>
      <%= render "fields", :f => f %>
    <% end %>
  <% end %>
  <p><%= submit_tag "Submit" %></p>
<% end %>

В новом коде каждая запись помещается в свою форму, все внутри одной формы(это то, что мне нужно).

Мой вопрос: как я могу получить код, предоставленный Railscasts Episode # 198, для работы в Rails 3?

Вот ссылка наRailscast я упомянул: http://railscasts.com/episodes/198-edit-multiple-individually

Спасибо, c.allen.rosario

Ответы [ 2 ]

18 голосов
/ 09 декабря 2010

Я нашел решение.Просто нужно изменить следующую строку в коде, предоставленном Ryan @ Railscasts:

<% fields_for "products[]", product do |f| %>

и изменить его на:

<%= fields_for "products[]", product do |f| %>

Обратите внимание, что <% был изменен на<%=.

окончательное решение:

<% form_tag update_individual_products_path :method => :put do %>  
  <% for product in @products %>  
    <%= fields_for "products[]", product do |f| %>  
      <h2><%= h product.name %></h2>  
    <% end %>  
  <% end %>  
  <p><%= submit_tag "Submit" %></p>  
<% end %>  

Мне было интересно, сможет ли кто-нибудь объяснить мне это решение.Из того, что я понимаю, вам нужно только <% перед fields_for.

c.allen.rosario

4 голосов
/ 17 марта 2011

Изменение в Rails 3 с <% fields_for на <% = fields_for вызвано тем, что сбивало с толку то, что form_for, form_tag и т. Д. ... использовали <% form ...%> , хотя они они выводили HTML-код. В Rails 3, поскольку они выводят HTML-код, они используют <% =. </p>

Обратите внимание, что ваша первая строка устарела:

<% form_tag update_individual_products_path, :method => :put do %>

должно быть

<%= form_tag update_individual_products_path, :method => :put do %>

То же самое для всех тегов формы.

...