在我的应用中:
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 %>
在我的setlists控制器中,我有:
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
allocate方法在setlist模型中指定为:
def allocate!(song)
allocations.create!(song_id: song.id)
end
每当我点击将歌曲添加到设置列表时,它会返回以下内容。
SetlistsController#update中的NoMethodError undefined方法`id':song:Symbol
该错误也很奇怪,因为它只对表中的第一条记录执行上述错误,而其他所有错误都会在未添加记录时呈现“错误”页面。
任何指针都将不胜感激。非常感谢提前
答案 0 :(得分:1)
您正在将符号:song
传递给
allocate!
@setlist.allocate!(:song)
当allocate!
期望传递Song
的实例时。 :song
符号没有方法.id
,因此错误。
如果您尝试传递与
相关的Song
<%= f.hidden_field :song_id %>
您必须先获得Song
。
song = Song.find(params[:allocation][:song_id])
@setlist.allocate!(song)