在nested_forms中更新

时间:2011-04-08 08:28:50

标签: javascript jquery ruby-on-rails ruby-on-rails-3

我正在使用Rails 3.0.3
我有一个模范账单:

class Bill < ActiveRecord::Base
   has_many :entries    
   accepts_nested_attributes_for :entries

end

在我的比尔视图中,我使用嵌套表单在账单中创建新条目,并且使用Javascript我现在插入现有条目,没有bill_id:

$("#row" + nested_form_id).append("<input type='hidden' name='bill[entries_attributes][" + nested_form_id + "][id]' id='bill_entries_attributes_" + nested_form_id + "_id' value='" + id +"' >");

当我提交表单时,我收到此错误:

ActiveRecord::RecordNotFound (Couldn't find Entry with ID=127 for Bill with ID=):
  app/controllers/bills_controller.rb:121:in `new'
  app/controllers/bills_controller.rb:121:in `create'

所以问题是,当我提交

时,rails正在寻找账单中的条目

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我无法弄清楚嵌套表单是如何实现的,所以我将已经存在的条目设置为账单:

nested_entries = {}      
params[:bill][:entries_attributes] = {}  


params[:entries].each_pair do |key, value|    
   if value[:id].nil?
      params[:bill][:entries_attributes][key] = value 
   else 
     nested_entries[key] = value
   end                             
end           

@bill = Bill.new(params[:bill])  
@bill.save  

bill_id = @bill.id        

nested_entries.each_pair do |key, value|   
   @entry = Entry.find(value[:id])    
   value[:bill_id] = bill_id                            
   @entry.update_attributes(value) 
end