Сохранение записей has_many при создании записи own_to - PullRequest
1 голос
/ 08 октября 2009
class Bill < ActiveRecord::Base
  has_many :invoices
end

class Invoice < ActiveRecord::Base
  belongs_to :bill
end

Тогда в моей форме у меня есть несколько полей для счетов с именем bill[invoice_names][], поэтому я могу получить к ним доступ из params[:bill][:invoice_names].

На данный момент у меня есть такой метод в моей модели Билла:

#bill.rb
def save_invoices(invoices)
  if invoices
    invoices.each do |invoice|
      @invoice = Invoice.new
      @invoice.invoice = invoice
      @invoice.bill_id = self.id
      @invoice.save
    end
  end 
end

А затем вызовите его для метода создания bills_controller, например, так:

#bill_controller.rb
def create
  @bill = Bill.new(params[:bill])

  respond_to do |format|
    if @bill.save
      @bill.save_invoices(params[:bill][:invoice_names])
      flash[:notice] = 'Bill was successfully created.'
      # ...
    else
      # ...
    end
  end
end

Так как рельсы часто бывают магическими, я попытался назвать поля bill[invoices][] и скрестил пальцы в надежде, что они одновременно создадут эти записи без дополнительного кода. Это не сработало, поэтому я написал этот метод save_invoices, и мне пришлось переименовать поля во что-то отличное от bill[invoices][], потому что это дало мне ошибку.

Есть ли лучший способ сделать это?

1 Ответ

3 голосов
/ 08 октября 2009

Похоже, вы ищете вложенные формы . Введенный в Rails 2.3, я видел некоторую критику в их отношении , так что не забудьте прочитать и взвесить варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...