Rails还是新手。我会尽量提供尽可能详细的信息。
我有一个表单,可以让我一次更新多个记录 它基于'Editing Multiple Individually' Railscast episode。
<%= form_tag(auction_clerk_path(@auction), :method => :put) do %>
<% @lots.each do |lot| %>
<%= fields_for "lots[]", lot do |f| %>
<%= f.number_field :sale_price %>
<% end %>
<% end %>
<% end %>
(简化为每个实例仅包含一个输入)
拍卖包含多个 Lots (待售商品)。
auction_clerk_path
是我用来在一次拍卖中显示所有拍品的路线。
一切正常......直到我尝试自定义我的路径......
我已将以下内容添加到 lot.rb 文件中,以便能够使用:
/auctions/:auction_id/lots/:lot_number
而不是/auctions/:auction_id/lots/:id
def to_param
lot_number
end
因此,在前面提到的表单中,字段使用name="lots[12][sale_price]"
呈现,其中12
是id
。
然而,在to_param
更改后,现在字段呈现name="lots[1][sale_price]"
,其中1是lot_number
。
保存时,提交的参数是lot_numbers而不是ids 很明显,当它试图更新时,它将找不到正确的记录。
我的方法定义如下:
def save_clerking
@updated_lots = Lot.update(params[:lots].keys, params[:lots].values).reject { |l| l.errors.empty? }
if @updated_lots.empty?
flash[:notice] = "Lots updated"
redirect_to auction_clerk_path(@auction)
else
render :action => "clerk"
end
end
我需要将我的方法定义更改为按批号查找,或者首先将表单更改为以某种方式输出ID ...但我不知道如何。
感谢任何帮助。谢谢!
答案 0 :(得分:0)
通过对另一个问题的一些帮助解决了这个问题。
我将方法def改为
@updated_lots = []
params[:lots].each do |lot_number, attributes|
lot = Lot.where("lot_number = ? AND auction_id = ?", lot_number, params[:auction_id]).first
if lot.update_attributes(attributes)
@updated_lots << lot
end
end
答案 1 :(得分:0)
您可以在控制器操作中按批号获取ID,并将其提供给更新方法而不是params键。