【发布时间】:2014-02-16 18:44:24
【问题描述】:
在我的 Rails 应用程序中,我有一个模型 Song。在用户的个人资料页面user_music_path(@user) 上,我正在渲染他们所有的歌曲。
人们也可以喜欢这些歌曲,它是设置和工作的,我只想使用 AJAX 而不是页面刷新。我遇到的问题是在使用 ajax 时,单击“like”链接时出现错误 undefined local variable or method "song"。
这是我的一些代码:
用户的音乐页面浏览量/users/music.html.erb
...
<ul class="playlist list-group">
<%= render @songs %>
</ul>
views/songs/_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>
views/songs/_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 %>
views/songs/_likes.html.erb
<%= song.votes.count %>
views/songs/like.js.coffee
$("p.pull-right").html('<%= render :partial => "songs/like_button", :locals => {:song => song} %><%= render :partial => "songs/likes", :locals => {:song => song} %>');
controllers/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>):
【问题讨论】:
标签: ruby-on-rails ajax ruby-on-rails-4 coffeescript