2014-01-25 2 views
0

В моем приложении 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>):

ответ

1

Где у вас есть

<a href="<%= song.audio %>"><%= song.name %></a> 

попробовать вместо

<a href="<%= @song.audio %>"><%= @song.name %></a> 

И сделать то же самое с вашими link_to путей и ваших render вызовов.

+0

Поскольку я использую частичный «_song.html.erb», я вызываю рендеринг в песенной переменной класса 'Song', поэтому я все же могу использовать локальную переменную' song' вместо '@ song' –

+1

Пока вы это делаете:' {: song => @song} ' – Vidya

+0

Если я это сделаю, он меняет каждую песню на этой странице, когда я пытаюсь любить одну песню. –

0

Do rake routes и их использование для ссылки, например. (псевдокод) link_to 'song', song_audio_path

+0

Это не проблема. Проблема заключается не в связи с звуком песни, а в том, что песня нравится/неактивна, проблема заключается в получении частичной частичной рендеринга с локальной переменной 'song'. –

Смежные вопросы