0

私は関係を通して多くを持っているためのフォームを作成することに少し立ち往生しています。現時点では、私のモデルでは、割り当てを介して、曲に多くのセットリストを含めることができ、その逆も可能です。

私は現在、ユーザーがセットリストに曲を追加できる編集ページに取り組んでいます。現在、ビューは次のようになっています。

<h1>Edit a Setlist</h1>
<div class="row">
   <div class="span8">
      <%=form_for(@setlist) do|f|%>

         <%=f.label :date, "Set a date" %>
         <span><%=f.date_select :date%><span>

        <div>
          <div id="library">
          <%= render 'library' %>
          </div>

          <%= render 'songs_in_set' %> 

        </div>

         <%=f.submit "Save", class: "btn btn-large btn-primary" %>
      <% end %>
   </div>
</div> 

上記で部分的に参照されているライブラリ:

<table class= "table table-striped table-bordered">
        <thead>
            <th>Title</th>
            <th>Artist</th>
            <th>Add to Set</th>
        </thead>
        <tbody>
          <% @songs.each do |song| %>
            <tr>
               <td><%= song.title %></td>
               <td><%= song.artist %></td>
               <td><%= link_to "ADD", '#' %></td>
            </tr>
          <% end %>
        </tbody>
</table>

ライブラリ内のそのリンクを、新しい割り当てを作成するためのフォームに部分的に変換して、セットリストに曲を追加したいと思います。

私のコントローラーからの関連ビット:セットリストコントローラー:

def edit
    @songs = Song.all(order: 'title')
    @setlist = Setlist.find(params[:id])
    @allocations = @setlist.allocations
  end

  def update

    @setlist = Setlist.find(params[:id])
    if @setlist.update_attributes(params[:setlist])

      flash[:success] = "SAVED!"
      redirect_to setlist_path(@setlist)
    else
      render 'edit'
    end
  end

および割り当てコントローラ:

def new @allocation = Allocation.new end

def create

@allocation = Allocation.new(params[:allocation])

if @allocation.save
 flash[:success] = "Songs added"
 redirect_to edit_setlist_path(@allocation.setlist_id)
else
     flash[:fail] = "Error"
 redirect_to edit_setlist_path(@allocation.setlist_id)
end

終わり

setlist.allocations.buildに沿って何かをしなければならないことは知っていますが、正しいパラメーターを取得するのに問題があります(個々の曲IDとセットリストIDを取得する)。曲の中にヘルパー用のフォームを入れてみました。それぞれがループしますが、うまくいかなかったようです。私は少し迷っているので、正しい方向へのポインタをいただければ幸いです。前もって感謝します

4

1 に答える 1

0

これをに追加してみてくださいSetlist

accepts_nested_attributes_for :allocations, :dependent => :destroy

次に、関連付けフィールドセットをセットリスト フォーム内にネストできます。ライブラリのパーシャルで:

<td>
  <%= f.fields_for :allocations do |ff| %>
    <%= f.hidden_field :song_id, song.id %>
    ...
  <% end %>
</td>

これは、既に存在する曲の割り当てを作成したい場合に機能しますが、同じ形式で曲を作成している場合、別のシナリオが必要になる場合があります。少し前にそのような問題があり、きれいな解決策を見つけることができませんでしたが、お知らせください。それも共有できます...

于 2012-07-12T12:33:37.430 に答える