Как построить дочерние элементы вложенной формы в контроллере - PullRequest
2 голосов
/ 17 июля 2011

Я знаю, как построить 2-й объект в контроллере, но как построить третий или четвертый?

В моем случае мне нужно построить 3.

Location - has_many :product_dates, :products
ProductDate - has_many :products & belongs_to :location
Product - belongs_to :location, :product_date

Iлегко определить местоположение и дату продукта:

def new
  @location = Location.new
  @location.product_dates.build
end

Теперь мне нужно построить продукты в форме.Может кто-нибудь показать мне, как это сделать?

РЕДАКТИРОВАТЬ: Полный ответ:

def new
    @location = Location.new
    product_date = @location.product_dates.build
    product_date.products.build
end

    <%= form_for @location do |f| %>
    <%= f.text_field :business %>
    <%= f.text_field :address %>

    <%= f.fields_for :product_dates do |date| %>
    <%= date.date_select :date %>

    <%= date.fields_for :products do |product| %>
    <%= product.text_field :name %>
     <%= product.text_field :price %>
    <%= product.text_field :tag_list %>
    <% end %>
    <% end %>
    <%= f.submit "Create" %>        
<% end %>

Ответы [ 2 ]

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

Вы узнаете все в видео здесь .

EDIT:

изменить вложенную часть с помощью:

<%= f.fields_for :product_dates do |date| %>
  <%= date.date_select :date %>
  <%= date.fields_for :products do |product| %>
   <%= product.text_field :name %>
   <%= product.text_field :price %>
   <%= product.text_field :tag_list %>
  <% end %>
<% end %>

Потому что products вложены внутрь product_dates

2 голосов
/ 17 июля 2011

добавить к вашему контроллеру:

def new
  @location = Location.new
  @product_dates = @location.product_dates.build
  @product = @product_dates.product.build
end

в вас Модель ProductDate:

class ProductDate < ActiveRecord::Base
  accepts_nested_attributes_for :products
...

в вас Модель местоположения:

class Location < ActiveRecord::Base
  accepts_nested_attributes_for :product_dates
...

И ваша форма должна бытькак это:

<% f.fields_for :product_dates do |date| %>
  <%= date.text_field :content %>
  <% date.fields_for :products do |product| %>
    <%= product.text_field :content %>
  <%end %>
<% end %>
...