ruby-on-rails – 在几个地方使用fields_for
发布时间:2020-12-17 01:21:21 所属栏目:百科 来源:网络整理
导读:我有一个简单的模型 class Ad ActiveRecord::Base has_many :ad_itemsendclass AdItem ActiveRecord::Base belongs_to :adend 我有一个“广告/新”视图,显示了创建新广告的形式,并向其中添加了一些项目 .html.erb代码如下所示: % form_for @ad,do |ad_form|
我有一个简单的模型
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 %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |