ruby-on-rails – 在几个地方使用fields_for

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在几个地方使用fields_for前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的模型
class Ad < ActiveRecord::Base
   has_many :ad_items
end

class AdItem < ActiveRecord::Base
   belongs_to :ad
end

我有一个“广告/新”视图,显示了创建新广告的形式,并向其中添加了一些项目

.html.erb代码如下所示:

<% form_for @ad,do |ad_form| %>
   <!-- some html -->

   <% ad_form.fields_for :ad_items do |f| %>
      <%= f.text_area "comment",:class => "comment",:rows => "5" %>
   <% end %>

   <!-- some other html -->

   <% ad_form.fields_for :ad_items do |f| %>
      <% render :partial => "detailed_item_settings",:locals => {:f => f} %>
   <% end %>
<% end %>

当广告有一个项目…

def new
   @ad = session[:user].ads.build

   # Create one item for the ad. Another items will be created on the
   # client side
   @ad.ad_items.build

   # standard stuff ...
end

…结果HTML,将如下所示:

<form ... >
   <!-- some html -->

   <textarea id="ad_items_attributes_0_comment" name="ad[ad_items_attributes][0][comment]" />

   <!-- some other html -->

   <!-- "detailed_item_settings" partial's content -->
      <textarea id="ad_ad_items_attributes_1_desc" name="ad[ad_items_attributes][1][desc]" />
   <!-- end -->
</form>

正如在代码中所述,我使用fields_for方法两次,因为HTML结构,我必须遵循

对于第二个“fields_for”调用,“item”的索引已经是1,而不是0.

就这样,通过调用“fields_for”方法,一些内部计数器将会增加

但这是一个奇怪的行为…

我试图设置:index => 0为fields_for,但都保持不变…

这里有什么问题?

解决方法

您可以为每个项目手动设置索引,但必须迭代您的项目以获取项目索引:
<% ad_form.fields_for :ad_items do |f| %>
     <%= f.text_area "comment",:rows => "5" %>
  <% end %>
  ...
  <% ad_items.each_with_index do |item,i| %>
    <% ad_form.fields_for :ad_items,item,:child_index => i do |f| %>
      <% render :partial => "detailed_item_settings",:locals => {:f => f} %>
    <% end %>
  <% end %>

猜你在找的Ruby相关文章