私のアプリでは:
A song has many setlists through allocations
A setlist has many songs through allocations
allocations belong to setlists and songs
次のフォームを使用して、既存のライブラリからセット リストに曲を追加しようとしています。
<% @songs.each do |song| %>
<tr>
<%= nested_form_for(@setlist.allocations.build(song_id: song.id)) do |f| %>
<td><%= song.title %></td>
<td><%= song.artist %></td>
<td><%= song.key %></td>
<td>
<div><%= f.hidden_field :song_id %></div>
<%= f.submit "ADD", class: "btn btn-small btn-primary" %>
<% end %>
</td>
</tr>
<% end %>
私のセットリストコントローラーには次のものがあります。
def edit
@songs = Song.all(order: 'title')
@setlist = Setlist.find(params[:id])
@setSongs = @setlist.songs
@allocations = Allocation.where("setlist_id =?", @setlist)
end
def update
@setlist = Setlist.find(params[:id])
song = Song.find(params[:song_id])
@setlist.allocate!(song)
if @setlist.update_attributes(params[:setlist])
# Handle a successful update.
flash[:success] = "SAVED!"
redirect_to setlists_path
else
render 'edit'
end
end
割り当て方法は、setlist モデルで次のように指定されます。
def allocate!(song)
allocations.create!(song_id: song.id)
end
現時点では、クリックしてセットリストに曲を追加するたびに、次のように返されます。
SetlistsController#update の NoMethodError :song:Symbol の未定義のメソッド「id」
このバグは、テーブルの最初のレコードに対してのみ上記のエラーが発生するという点でも奇妙です。他のすべてのレコードは、レコードが追加されていない場合に「エラー」ページをレンダリングします。
任意のポインタをいただければ幸いです。よろしくお願いします