在我的rails应用中,我有一个模型Song
。在用户的个人资料页面user_music_path(@user)
之一,我正在渲染他们所有的歌曲。
人们也可以喜欢这些设置和工作的歌曲,我只想使用AJAX而不是页面刷新。我遇到的问题是当使用ajax时,当我点击链接“喜欢”时,我收到错误undefined local variable or method "song"
。
以下是我的一些代码:
用户的音乐页面浏览量/ users / music.html.erb
...
<ul class="playlist list-group">
<%= render @songs %>
</ul>
视图/歌曲/ _song.html.erb
<li class="list-group-item">
<p class="pull-right">
<%= render :partial => 'songs/like_button', :locals => {:song => song} %>
<%= render :partial => 'songs/likes', :locals => {:song => song} %>
</p>
</li>
视图/歌曲/ _like_button.html.erb
<% if current_user.voted_on?(song) %>
<%= link_to "Unlike", unlike_song_path(song), :method => :post, :remote => true %>
<% else %>
<%= link_to "Like", like_song_path(song), :method => :post, :remote => true %>
<% end %>
视图/歌曲/ _likes.html.erb
<%= song.votes.count %>
视图/歌曲/ like.js.coffee
$("p.pull-right").html('<%= render :partial => "songs/like_button", :locals => {:song => song} %><%= render :partial => "songs/likes", :locals => {:song => song} %>');
控制器/ songs_controller.rb
def like
begin
@vote = current_user.vote_for(@song = Song.find(params[:id]))
@vote.save
respond_with @song.user, :location => user_music_path(@song.user)
rescue ActiveRecord::RecordInvalid
redirect_to @song
end
end
如前所述,在我开始使用AJAX之前,:like
动作完美无缺。我还在respond_to :html, :js
添加了songs_controller
。当我尝试喜欢这首歌时,我得到的错误是ActionView::Template::Error (undefined local variable or method "song" for #<#<Class:0x000001028de9d0>:0x00000106ecd9f0>):
答案 0 :(得分:1)
你在哪里
<a href="<%= song.audio %>"><%= song.name %></a>
尝试改为
<a href="<%= @song.audio %>"><%= @song.name %></a>
对您的link_to
路径和render
来电也一样。
答案 1 :(得分:0)
执行rake routes
并将其用于链接,例如(伪代码)link_to 'song', song_audio_path