Rails 3嵌套模型表单

时间:2011-07-14 23:04:35

标签: ruby-on-rails ruby-on-rails-3 nested-forms rails-models

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

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

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的标签都没有显示 - 没有错误消息,它只是没有出现。

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

谢谢!

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

编辑:为避免疑问,我的销售总监的新方法如下:

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

1 个答案:

答案 0 :(得分:4)

customer_attributes添加到attr_accessible模型中的Sale

另一个错误;替换:

<% f.fields_for :customer do |builder| %>

使用:

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