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][]
, потому что это дало мне ошибку.
Есть ли лучший способ сделать это?