5

会場のテーブルがあり、会場編集ページのネストされたフォームを使用して、各会場にオファーを追加しています。ただし、新しいオファーを追加するたびに、fields_forフォームは入力されたテキストを保存し、追加する別のオファーレコード用の新しい空白のフォームを作成します。

追加されたレコードごとに1つではなく、1つの「新しいオファーを追加」フォームが必要です。

オファーは追加されていません-これは問題ありません: ここに画像の説明を入力してください

1つのオファーが追加されました-2つの「新しいオファーを追加」フォームと不要な空白のオファーが部分的に追加されました:

ここに画像の説明を入力してください

これは、1つのオファーを追加した後の外観です。 ここに画像の説明を入力してください

新しい空白のオファーフォームと空白のパーシャルの数は、コントローラーに組み込まれている数に応じて変化します(その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 %>

では、会場の編集ページに新しいオファーフォームを1つだけ追加して、フォームを空白にして再度使用できるようにするにはどうすればよいですか?また、空白のオファーパーシャルが作成されないようにする方法はありますか?

助けてくれてありがとう!

4

2 に答える 2

7
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 %>
于 2011-07-24T10:32:38.180 に答える
0

これがうまくいくかどうかはわかりませんが、次のことを試しましたか?

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

問題は、シンボル:offersを渡すことだと思います。これにより、フィールドはすべてのオファーのフィールドを作成しますが、fields_forメソッドにも特定のオブジェクトのみを渡すことができるはずです。

于 2011-07-24T09:48:08.753 に答える