Rails 3 вложенная модель формы - PullRequest
4 голосов
/ 15 июля 2011

У меня проблемы с вложенными моделями в форме, использующими 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 Ответ

4 голосов
/ 15 июля 2011

Добавьте customer_attributes к вашему attr_accessible в модели Sale.

Другая ошибка;Заменить:

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

На:

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