Ruby on Rails: créer des enregistrements de plusieurs modèles, avec un formulaire et soumettre un

J'ai un 3 modèles: devis, le client et le point. Chaque citation a un client et un seul élément. Je voudrais créer un nouveau devis, un nouveau client, et d'un nouvel élément dans leurs tables respectives lorsque j'appuie sur le bouton soumettre. J'ai regardé d'autres questions et railscasts et soit ils ne fonctionnent pas pour ma situation ou je ne sais pas comment les mettre en œuvre.

devis.rb

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

client.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

élément.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

mon formulaire de devis/nouveau.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 %>

Quand j'ai essayer la soumission que j'obtiens une erreur:

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

Donc, pour essayer et de le corriger j'ai mis à jour le attr_accessible dans le devis.rb inclure :élément :le client, mais ensuite, j'obtiens cette erreur:

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

Toute aide serait grandement appréciée.

Essayez de faire :le nom et l' :description accessible et :prénom et :lastname accessibles dans leurs modèles respectifs.
Je l'ai fait mais j'ai toujours les mêmes erreurs.

OriginalL'auteur notblakeshelton | 2013-06-26