2011-07-14 128 views
4

我在使用Rails 3.1rc4的表单中嵌套模型时遇到了一些问题。Rails 3嵌套模型表格

我目前有看起来像这样的模式:

class Sale < ActiveRecord::Base 
    attr_accessible :customer_id, :vehicle_id, :sale_date 

    belongs_to :customer 
    accepts_nested_attributes_for :customer 
end 

class Customer < ActiveRecord::Base 
    attr_accessible :dealership_id, :first_name, :last_name, :address1, :email 

    belongs_to :dealership 

    has_many :sales 
    has_many :vehicles, :through => :sales 

end 

我明明截断这些略有下降,但所有重要的信息是存在的。

我试图建立一个销售表格,这也将允许我创建一个新客户,因此销售模式中的accepts_nested_attributes_for :customer行。

我的表单视图看起来像(再次截断,只有重要的组成部分):

<%= form_for @sale, :html => {:class => 'fullform'} do |f| %> 

     <%= f.error_messages %> 

     <%= field_set_tag 'Customer Details' do %> 
      <% f.fields_for :customer do |builder| %> 
       <%= builder.label :first_name %><br> 
       <%= builder.text_field :first_name %> 
      <% end %> 
     <% end %> 
    <% end %> 

我遇到的问题是,无论是文本字段,也不适用于标签:FIRST_NAME被显示出来时,形式是呈现 - 没有错误消息,它只是不会出现。

我应该提一下,我已经在我的控制器的new方法中试过有和没有@sale.customer.build,但它似乎没有效果。

谢谢!

任何人都可以建议我做错了什么?

编辑:为免生疑问,我的销售控制器的新方法是这样的:

def new 
    @sale = Sale.new 
    @sale.customer.build 
end 
+0

好吧,我发现了一些信息表明,而不是'@ sale.customer.build'我应该有'@ sale.build_customer'。我修改了新的方法来反映这一点,但仍然无济于事。 –

+0

我测试过编辑销售记录的表单,而不是创建一个新记录,并且我发现它工作正常 - 因此,问题显然是在控制器中创建空的客户记录。既尝试'@ sale.customer.build'和'@ sale.build_customer'都没有工作,任何人都可以建议我需要在控制器中有什么? –

回答

4

添加customer_attributesattr_accessibleSale模型。

另一个错误;替换:

有了:

<%= f.fields_for :customer do |builder| %> 
+0

如果销售有关联客户,这将只显示嵌套字段。为了获得新客户的领域,您可以在控制器中建立新客户。看看这个railscast和后面的插曲,其中显示了如何通过javascript添加新的客户字段。 http://railscasts.com/episodes/196-nested-model-form-part-1 –

+0

如前所述,我已经用'@ sale.customer.build'(在'@sale = Sale.new'之后)尝试了这一点。在我的控制器的新方法中,这看起来没有任何效果。我也做了上面提到的调整(将':customer_attributes'添加到attr_accessible,以及缺少'='),但它没有效果。 –

+0

你应该在你的代码中保留'@ sale.customer.build'(你提到过,这就是我没有重复的原因)。你有任何错误信息?或者你可以发布参数? – apneadiving