我有一个场地表,我在场地编辑页面上使用嵌套表格为每个场地添加优惠。但是,每次添加新商品时,fields_for表单都会保存输入的文本,并为要添加的其他商品记录创建新的空白表单。
我只想要一个'添加新优惠'表单,而不是每个添加的记录。
没有添加任何优惠 - 这很好:
添加了一项优惠 - 现在theres 2'添加新优惠'表单和不需要的空白优惠部分:
添加一个优惠之后,这就是我想要的样子:
新的空白报价表格和空白部分的数量随着控制器中内置的数字的变化而变化(在1分钟时)
场地管制员
class VenuesController < ApplicationController
def edit
@venue = Venue.find(params[:id])
1.times { @venue.offers.build }
end
def update
@venue = Venue.find(params[:id])
if @venue.update_attributes(params[:venue])
flash[:notice] = 'Venue updated successfully'
redirect_to :back
end
end
end
场地模型
class Venue < ActiveRecord::Base
has_many :offers
accepts_nested_attributes_for :offers
end
场地edit.html.erb
<%= form_for @venue do |f| %>
<h2 class="venue_show_orange">Offers</h2>
<div class="edit_venue_details">
<% if @venue.offers.count.zero? %>
<div class="no_offers">
No offers added yet.
</div>
<% else %>
<%= render :partial => 'offers/offer', :collection => @venue.offers %>
<% end %>
<div class="clearall"></div>
<h2 class="edit_venue_sub_header">Add a new offer</h2>
<%= f.fields_for :offers do |offer| %>
<p class="edit_venue">title: <br>
<%= offer.text_field :title, :class => "edit_venue_input" %></p>
<% end %>
</div>
<button class="submit_button" type="submit"> Save changes</button>
<% end %>
那么我怎样才能在场地编辑页面上添加一个新的优惠表格,这样我就可以添加一个新的优惠,然后填写表格以便再次使用?另外,有没有办法阻止创建空白报价部分?
非常感谢任何帮助,非常感谢!
答案 0 :(得分:7)
class VenuesController < ApplicationController
def edit
@venue = Venue.find(params[:id])
end
...
end
场地edit.html.erb
<%= f.fields_for :offers, @venue.offers.build do |offer| %>
<p class="edit_venue">title: <br>
<%= offer.text_field :title, :class => "edit_venue_input" %></p>
<% end %>
答案 1 :(得分:0)
我不确定这是否有效,但您是否尝试过以下操作?
<%= f.fields_for @venue.offers.last do |offer| %>
我认为问题在于您传递了符号:offers,这会导致字段为所有商品创建字段,但您应该只能将特定对象传递给fields_for方法。