Несколько детей в единственной форме в направляющих

У меня есть модель, которая имеет произвольное число дочерних объектов. Поскольку простота позволяет, называют Заказы объектов и Объекты. Я хотел бы иметь создать форму Заказов, где я ввел информацию для заказа, а также добавляю столько объектов, сколько я хочу. Если я нажму кнопку "Add another item", то новый набор элементов формы будет добавлен для ввода новых данных, сумм, и т.д.

Я мог вырубить это в чистом JavaScript, но я вполне уверен должно быть более волшебное, railsish способ сделать это, возможно, с частичным представлением или чем-то. Я просто немного слишком плохо знаком с направляющими для знания, каково это.

Что лучший способ состоит в том, чтобы динамично добавить новые элементы формы, и затем получить доступ к ним в создать контроллере?

8
задан captncraig 10 April 2010 в 22:35
поделиться

1 ответ

Невозможно превзойти этот Railscasts.com учебник, предоставленный Райаном Бейтсом.

Эпизод 196: Форма вложенной модели, pt. 1

Вот пример, который работает только с одним уровнем вложенности

Модели

models / company.rb

class Company < ActiveRecord::Base
  has_many :people, :dependent => :destroy
  accepts_nested_attributes_for :people, :allow_destroy => true
end

models / person.rb

class person < ActiveRecord::Base
  belongs_to :company
end

Контроллеры

companies_controller.rb

def new
  @company = Company.new
  3.times { person = @company.people.build }
end

Представления

views / companies / _form.html.erb

<% form_for @company do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>

  <%= f.fields_for :people do |builder| %> 
    <%= render "people_fields", :f => builder %>
  <% end %>

  <p><%= f.submit "Submit" %></p>
<% end %>

views / companies / _people_fields.html.erb

<p>
  <%= f.label :name, "Person" %>
  <%= f.text_field :name %>
  <%= f.check_box :_destroy %>
  <%= f.label :_destroy, "Remove" %>
</p>
15
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: