class Invoice < ActiveRecord::Base
attr_accessible :line_items_attributes
accepts_nested_attributes_for :line_items
has_many :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :invoice
def prepopulate_with(l_items)
unless l_items.empty?
self.line_items = l_items
end
end
end
class InvoiceController < ApplicationController
def new
@invoice = Invoice.new
if params[:line_items]
line_items = params[:line_items].map{|li| LineItem.find(li)}
#prepopulate_with just set @invoice.line_items = whatever_array_of_line_items that was passed in
@invoice.prepopulate_with(line_items)
end
end
def create
@invoice = Invoice.new(params[:invoice])
if @invoice.save
flash[:notice] = "Successfully created invoice."
redirect_to @invoice
else
render :action => 'new'
end
end
end
Позиция создается до выставления счета. Таким образом, они будут иметь свои индивидуальные идентификаторы. Я в основном предварительно загружаю Invoice.new с line_items для нового действия. Затем эта вложенная форма счета-фактуры, содержащая line_items (с идентификатором), публикуется в действии create.
Ошибка:
ActiveRecord::RecordNotFound in InvoicesController#create
Couldn't find LineItem with ID=21 for Invoice with ID=
Я включил соответствующий раздел формы ниже:
<% f.fields_for :line_items do |li| %>
<%= li.text_field :description %>
<%= li.text_field :amount %>
<% end %>