В моем приложении rails у меня есть модель Song
. На одной из страниц профиля пользователя user_music_path(@user)
Я выполняю все свои песни.Использование ajax для частичного отображения
Люди могут также любить эти песни, которые настроены и работают, я просто хочу использовать AJAX вместо обновления страниц. Проблема, с которой я сталкиваюсь, заключается в использовании ajax, я получаю ошибку undefined local variable or method "song"
, когда я нажимаю ссылку «нравится».
Вот некоторые из моего кода:
пользователя Музыка Страница просмотров/пользователей/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
И, как упоминалось ранее, действие :like
отлично работало до того, как я начал использовать AJAX. Я также добавил respond_to :html, :js
к моим songs_controller
. И ошибка я получаю, когда я пытаюсь нравится песня ActionView::Template::Error (undefined local variable or method "song" for #<#<Class:0x000001028de9d0>:0x00000106ecd9f0>):
Поскольку я использую частичный «_song.html.erb», я вызываю рендеринг в песенной переменной класса 'Song', поэтому я все же могу использовать локальную переменную' song' вместо '@ song' –
Пока вы это делаете:' {: song => @song} ' – Vidya
Если я это сделаю, он меняет каждую песню на этой странице, когда я пытаюсь любить одну песню. –