Rails accept_nested_attributes не работает - PullRequest
0 голосов
/ 02 марта 2011
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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...