2011-07-20 10 views
1

私はそれぞれが多くのオファーを持つことができる会場のテーブルを持っています。fields_forを使用してフォームの繰り返しを停止するにはどうすればよいですか?

私は、会場の編集ページから会場にオファーを追加するフォームを持っています。

フォームを送信すると、新しく作成されたオファーは部分的に表示されますが、フォームをクリアして別のオファーを入力できるようにする代わりに、別のフォームが作成されます。

5つのオファーを入力すると、6つの新しいオファーフォームが追加され、5つのオファーフォームには保存された詳細が入力されます。

私のコードは次のようになります。

会場モデル

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

編集 - 会場コントローラ

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 %> 

送信時に新しいフォームが作成されないようにするにはどうすればよいですか?

ご協力いただきありがとうございます。

編集

no offers added

1 offer added

2 offers added

+0

は、新しいオブジェクトが行きますか編集アクションに? – s84

+0

コントローラ全体を表示してください – s84

+0

@コードクローン、見ていただきありがとうございます、私は私の質問を編集しました。 – Dave

答えて

0

あなたのコントローラのためにこれを試してみてください:

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  
+0

は、未定義メソッド' update_attributes = 'をnilに与えます:NilClassエラー – Dave

+0

これは '@ venue'を見つけることができなかったことを意味します。 – s84

+0

文字通り自分のコードをコピーして貼り付けることができます。 – s84

関連する問題