2012-07-12 101 views
0

我有點卡住創建一個有很多通過關係的窗體。目前我的模型是歌曲可以有許多Setlists,反之亦然,通過Allocations。建築有很多通過現有的記錄關係鐵路

我目前正在編輯頁面,在該頁面中用戶可以將歌曲添加到集合列表。認爲目前看起來是這樣的:

<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新 @allocation = Allocation.new 端

DEF創建

@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 

end

我知道我必須沿着setlist.allocations.build做些事情,但我無法獲得正確的參數(獲取每個單獨的歌曲ID和setlist ID)。我試過在songs.each做循環內放置一個幫助器的表單,但這似乎不起作用。我有點失落,所以任何正確的方向指針將不勝感激。在此先感謝

回答

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> 

這應該工作,如果你想創建一個它已經存在的歌曲分配,但你可能需要的東西不同的情況下,當你還以相同的形式創造的歌曲。我不久前遇到過這樣的問題,但無法找到一個乾淨的解決方案,但讓我知道,我可以分享,以及...