Как я могу остановить дублирование вложенной формы fields_for с добавленными записями?

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

Мне просто нужна одна форма «добавить новое предложение», а не одна для каждой добавленной записи.

предложения не добавлены — все в порядке: введите здесь описание изображения

добавлено одно предложение - теперь есть 2 формы "добавить новое предложение" и нежелательное пустое частичное предложение:

введите здесь описание изображения

Вот как я хочу, чтобы это выглядело после добавления одного предложения: введите здесь описание изображения

Количество новых пустых форм предложений и пустых частей изменяется в зависимости от количества, встроенного в контроллер (в минуту его 1)

контролер объектов

class VenuesController < ApplicationController   
  def edit
    @venue = Venue.find(params[:id])
    1.times { @venue.offers.build }
  end

  def update
    @venue = Venue.find(params[:id])
    if @venue.update_attributes(params[:venue])
      flash[:notice] = 'Venue updated successfully'
      redirect_to :back
    end
  end
end

модель площадок

class Venue < ActiveRecord::Base
  has_many :offers
  accepts_nested_attributes_for :offers
end

место проведения edit.html.erb

      <%= form_for @venue do |f| %>

        <h2 class="venue_show_orange">Offers</h2>

        <div class="edit_venue_details">
          <% if @venue.offers.count.zero? %>
            <div class="no_offers">
              No offers added yet.
            </div>
          <% else %>
            <%= render :partial => 'offers/offer', :collection => @venue.offers %>
          <% end %>

          <div class="clearall"></div>

          <h2 class="edit_venue_sub_header">Add a new offer</h2>    

          <%= f.fields_for :offers do |offer| %>
            <p class="edit_venue">title: <br>
            <%= offer.text_field :title, :class => "edit_venue_input" %></p>
          <% end %>
        </div>

        <button class="submit_button" type="submit"> Save changes</button>
      <% end %>

Итак, как я могу иметь только одну форму добавления нового предложения на странице редактирования места проведения, которая позволяет мне добавить новое предложение, а затем очистить форму, чтобы ее можно было использовать снова? Кроме того, есть ли способ предотвратить создание пустых частей предложения?

Большое спасибо за любую помощь, это очень ценится!


person Dave    schedule 24.07.2011    source источник


Ответы (2)


class VenuesController < ApplicationController   
  def edit
    @venue = Venue.find(params[:id])
  end
  ...
end

места проведения edit.html.erb

<%= f.fields_for :offers, @venue.offers.build do |offer| %>
  <p class="edit_venue">title: <br>
  <%= offer.text_field :title, :class => "edit_venue_input" %></p>
<% end %>
person Vasiliy Ermolovich    schedule 24.07.2011

Я не уверен, что это сработает, но вы пробовали следующее?

<%= f.fields_for @venue.offers.last do |offer| %>

Я думаю, проблема в том, что вы передаете ему символ :offers, который заставляет поля для создавать поля для всех предложений, но вы также должны иметь возможность передавать только определенный объект в метод fields_for.

person harald    schedule 24.07.2011
comment
спасибо за быстрый ответ, это очистило все нежелательные повторяющиеся формы, но теперь не сохраняет новые записи, хотя ошибки не выдается. - person Dave; 24.07.2011
comment
Возможно, вам придется добавить его вручную в методе обновления. Что-то вроде @venue.offers << params[:venue][:offer] или что-то в этом роде. - person harald; 24.07.2011