Как остановить дублирование вложенной формы fields_for с добавлением записей? - PullRequest
5 голосов
/ 24 июля 2011

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

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

предложений не добавлено - это нормально: enter image description here

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

enter image description here

Вот чтоЯ хочу, чтобы это выглядело после добавления одного предложения: enter image description here

Количество новых пустых форм предложений и пустых партиалов изменяется в зависимости от числа, встроенного в контроллер (в минуту его 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 %>

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

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

Ответы [ 2 ]

7 голосов
/ 24 июля 2011
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 %>
0 голосов
/ 24 июля 2011

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

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

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

...