使用ajax渲染部分

时间:2014-01-25 19:34:56

标签: ruby-on-rails ajax ruby-on-rails-4 coffeescript

在我的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>):

2 个答案:

答案 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