I’m trying to build a form with nested attributes and in my view views/pedidos/new.html.erb I want to display one group of fields to pessoa and one to produto by default. In my PedidosController I have used pessoa = @pedido.build_pessoa and it works perfectly, my form render pessoa fields, but for produto I tried produto = @pedido.build_produtos and it says undefined method 'build_produtos' for #<Pedido id: nil, created_at: nil, updated_at: nil>
Here’s my models and my controller (used scaffold to generate)
class Pedido < ActiveRecord::Base
attr_accessible :pessoa_attributes, :produtos_attributes
has_one :pessoa
has_many :produtos
accepts_nested_attributes_for :pessoa, :produtos, allow_destroy: true
end
class Pessoa < ActiveRecord::Base
attr_accessible :email, :nome, :telefone
belongs_to :pedido
end
class Produto < ActiveRecord::Base
attr_accessible :nome, :quantidade
belongs_to :pedido
end
class PedidosController < ApplicationController
def new
@pedido = Pedido.new
1.times do
pessoa = @pedido.build_pessoa
produto = @pedido.build_produtos
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @pedido }
end
end
end
If the relationship is
has_many, you build it like so:@pedido.produtos.buildFor a
has_oneis prefixed as you’ve done, withbuild_[association].Kindof a gotchya, but simple once you know what’s going on.