Как я могу остановить повторение формы, используя fields_for? - PullRequest
1 голос
/ 21 июля 2011

У меня есть таблица мест, где у каждого может быть много предложений.

У меня есть форма, которая добавляет предложения к местам со страницы редактирования мест.

Когда я отправляю форму, вновь созданное предложение отображается как частичное, но вместо очистки формы, позволяющей ввести другое предложение, создается другая форма.

Так что, если я введу 5предложений У меня есть 6 новых предложений, 5 из которых с данными, введенными в сохраненные.

Мой код выглядит следующим образом:

модель объекта

class Venue < ActiveRecord::Base
  has_many :offers
  accepts_nested_attributes_for :offers, :reject_if => lambda { |a| a[:title].blank? }
end

edit - контроллер места проведения

class VenuesController < ApplicationController
  protect_from_forgery :only => [:update, :delete, :create] 
  load_and_authorize_resource

  def index
    if
      @venues = Venue.with_type(params[:venuetypes]).with_area(params[:areas]).order("average_rating DESC").all
    else
      @venues = Venue.all
    end
    @venues = @venues.paginate :per_page => 15, :page => params[:page]
  end

  def new
    @venue = Venue.new
  end

  def create
    @venue = Venue.new params[:venue]
    if @venue.save
      flash[:notice] = 'Venue added'
      redirect_to venues_path
    else
      render :action => :new
    end
  end

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

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

  def show
    @venue = Venue.find(params[:id])
    @review = Review.new
  end

  def destroy
    Venue.find(params[:id]).destroy
    flash[:notice] = 'Venue deleted successfully'
    redirect_to venues_path
  end
end

площадки edit.html.erb

  <%= form_for @venue do |f| %>
    <div class="edit_venue_details">

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

      <% if @venue.offers.count.zero? %>
        <div class="no_reviews">
          No offers added yet.
        </div>
      <% else %>
        <%= render :partial => 'offers/offer', :collection => @venue.offers %>
      <% end %>
      <div class="clearall"></div>
    </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 %>
    <button class="submit_button" type="submit"> Save changes</button>
  <% end %>

Как я могу предотвратитьновая форма создается при отправке?

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

edit

no offers added

1 offer added

2 offers added

1 Ответ

0 голосов
/ 21 июля 2011

Попробуйте это для своего контроллера:

def new
   @venue = Venue.new
   1.times { @venue.offers.build }
 end

 def create
   @venue = Venue.new params[:venue]
   if @venue.save
     flash[:notice] = 'Venue added'
     redirect_to edit_venue_path
   else
     render :action => :new
   end
 end

 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 edit_venue_path(@venue)
   end
  end      
...