Ruby on Rails: twórz rekordy dla wielu modeli z jednym formularzem i jednym przesyłaniem

Mam 3 modele: cytat, klienta i przedmiot. Każdy cytat ma jednego klienta i jeden przedmiot. Chciałbym utworzyć nowy cytat, nowego klienta i nowy przedmiot w odpowiednich tabelach po naciśnięciu przycisku przesyłania. Sprawdziłem inne pytania i oferty kolejowe i albo nie działają one w mojej sytuacji, albo nie wiem, jak je wdrożyć.

quote.rb

class Quote < ActiveRecord::Base
  attr_accessible :quote_number
  has_one :customer
  has_one :item
end

customer.rb

class Customer < ActiveRecord::Base
  attr_accessible :firstname, :lastname
  #unsure of what to put here
  #a customer can have multiple quotes, so would i use has_many or belongs_to?
  belongs_to :quote
end

item.rb

class Item < ActiveRecord::Base
  attr_accessible :name, :description
  #also unsure about this
  #each item can also be in multiple quotes
  belongs_to :quote

quotes_controller.rb

class QuotesController < ApplicationController
  def index
    @quote = Quote.new
    @customer = Customer.new
    @item = item.new
  end

  def create
    @quote = Quote.new(params[:quote])
    @quote.save
    @customer = Customer.new(params[:customer])
    @customer.save
    @item = Item.new(params[:item])
    @item.save
  end
end

items_controller.rb

class ItemsController < ApplicationController
  def index
  end

  def new
    @item = Item.new
  end

  def create
    @item = Item.new(params[:item])
    @item.save
  end
end

customers_controller.rb

class CustomersController < ApplicationController
  def index
  end

  def new
    @customer = Customer.new
  end

  def create
    @customer = Customer.new(params[:customer])
    @customer.save
  end
end

mój formularz dla quotes / new.html.erb

<%= form_for @quote do |f| %>
  <%= f.fields_for @customer do |builder| %>
    <%= label_tag :firstname %>
    <%= builder.text_field :firstname %>
    <%= label_tag :lastname %>
    <%= builder.text_field :lastname %>
  <% end %>
  <%= f.fields_for @item do |builder| %>
    <%= label_tag :name %>
    <%= builder.text_field :name %>
    <%= label_tag :description %>
    <%= builder.text_field :description %>
  <% end %>
  <%= label_tag :quote_number %>
  <%= f.text_field :quote_number %>
  <%= f.submit %>
<% end %>

Kiedy próbuję przesłać, otrzymuję błąd:

Can't mass-assign protected attributes: item, customer

Aby to naprawić, zaktualizowałem attr_accessible w quote.rb, aby zawierała: item,: customer, ale potem pojawia się ten błąd:

Item(#) expected, got ActiveSupport::HashWithIndifferentAccess(#)

Każda pomoc byłaby bardzo mile widziana.

questionAnswers(2)

yourAnswerToTheQuestion