Как я могу создать несколько экземпляров ассоциированной модели из rails 3 form_for, когда я не знаю, сколько я собираюсь добавить? - PullRequest
1 голос
/ 08 февраля 2011

У меня есть form_for, который создает новую «Оценку», и каждая из этих оценок может иметь неограниченное количество «Предметов» (это похоже на номер детали, но у него будет свой собственный набор атрибутов).Я хотел бы иметь возможность создать столько экземпляров модели связанных элементов, сколько я хочу, прежде чем я отправлю форму, которая создает новую оценку, а затем заставит ее создать все связанные элементы, которые соответствуют этой оценке.

Я много читал в API на form_for и accepts_nested_attributes_for, я много гуглил и смотрел рейлкасты о вложенных модельных формах, и я прочитал мою книгу rails 3, ноТем не менее, чтобы найти «путь рельсов», чтобы создать все эти новые объекты за один раз из одной формы.В Railscast у Райана есть что-то подобное в контроллере:

def new  
  @estimate = Estimate.new  
  3.times { @estimate.items.build }  
end

Однако я не знаю, сколько элементов будет в каждой оценке.Я также не уверен, какой синтаксис fields_for мне следует использовать в представлении, но я понимаю, что мне, вероятно, придется использовать JavaScript для динамического создания новых полей формы.

Вот как связаны мои модели:

class Estimate < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :items
end

и:

class Item < ActiveRecord::Base
  belongs_to :estimates
end

Итак, есть идеи?Как я уже сказал, я могу заставить свое приложение делать это (вероятно, я буду использовать много AJAX), но я надеялся, что у кого-то может быть более красивое решение.

Спасибо.

1 Ответ

1 голос
/ 09 февраля 2011

??? твой путь - лучший Rails Way. Возможно, вы не знаете, как построить форму для предметов? С помощью Rails Guides или Rails API вы можете написать следующее:

<%= form_for @estimate do |f| %>
  <p>
    <%= f.label :xxx %>
    <%= f.text_field :xxx %>
  </p>
  <%= f.fields_for :items do |item_field| %>
    <p>
      <%= item_field.label :yyy %>
      <%= item_field.text_field :yyy %>
    </p>
  <% end %>
<% end %>

И вы можете использовать оооочень хороший Gem, 'nested_form'. см .: https://github.com/ryanb/nested_form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...