2

我正在尝试构建一个具有嵌套属性的表单,在我看来,views/pedidos/new.html.erb我想默认显示一组字段到pessoa和一个到produto。在我使用过的PedidosController中,它运行良好,我的表单呈现pessoa字段,但对于尝试过的产品,它说pessoa = @pedido.build_pessoaproduto = @pedido.build_produtosundefined method 'build_produtos' for #<Pedido id: nil, created_at: nil, updated_at: nil>

这是我的模型和控制器(使用脚手架生成)

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
4

1 回答 1

2

如果关系是has_many,您可以像这样构建它:@pedido.produtos.build

对于 ahas_one前缀,就像你所做的那样,带有build_[association].

有点棘手,但一旦你知道发生了什么就很简单。

于 2012-10-26T22:13:24.713 回答