2017-09-17 1 views
0

Je reçois NoMethodError dans les Favoris # index undefined method nom 'nil: NilClass`, et mon but est de lister toutes les chansons qui sont ajoutées aux favoris? Mon code ci-dessous:Liste de toutes les chansons qui sont dans mes favoris? ruby on rails

favorite_controller

class FavoritesController < ApplicationController 

    include FavoriteHelper 

def index 
    @favorites = Song.all 
    @songs = Song.all 
    @songs = current_user.favorites 
    @top_songs = Favorite.joins("LEFT OUTER JOIN songs ON favorites.song_id = songs.id").select("favorites.*,songs.name as name, songs.artist_id as artist_id").group(:song_id).order('COUNT(songs.id) DESC') 
    .limit(10) 

    end 


private 

    def favorites_params 
    params.require(:favorites).permit(:song_id, :user_id) 
    end 

end 

songs_controller.rb

class SongsController < ApplicationController 
    before_action :find_song, {only: [:edit, :update, :show, :like]} 

    def index 
     @songs = Song.all 
     @songs = Song.search(params[:term]).paginate(:page => params[:page], :per_page => 10).order(created_at: :desc) 
     @top_songs = Favorite.joins("LEFT OUTER JOIN songs ON favorites.song_id = songs.id").select("favorites.*,songs.name as name, songs.artist_id as artist_id").group(:song_id).order('COUNT(songs.id) DESC') 
    .limit(10) 
    @latest_albums = Album.order('created_at DESC').last(5) 
    end 

_song.html.erb partielle de rendre des chansons en favoris

<% @songs.each do |song| %> 
<tr> 
    <th scope="row"><%= song.id %></th> 
<% if logged_in? %> 
    <td> 
    <div class="like"> 
     <div class="like-btn text-center" song_id="<%= song.id %>"> 
     <span class="<%= song.heart_class(current_user) %>"></span> 
     </div> 
    </td> 
    <td><%= link_to @song.name, favorite_path(song.id) %></td> 
    <td> 
     <a data-toggle="modal" data-target="#addSong" data-id="<%= song.id %>" title="Add this song to playlist" class="open-AddSong" href="#addSong"><i class="fa fa-plus" aria-hidden="true" rel="tooltip" data-placement="top" title="Add to playlist"></i></a> 

     <div class="modal fade" id="addSong"> 
     <%= render 'shared/add_song_to_playlist' %> 
     </div> 
    </td> 

    <% end %> 
    </tr> 
<% end %> 

routes.rb

post '/song:id/like', to: 'songs#like', as: :like 

    resources :songs 

    resources :favorites do 
    resource :songs 
    end`enter code here` 

Merci à tous!

Répondre

0

Tout d'abord (non liée à la question), dans votre action favorites#index, vous avez:

@songs = Song.all 
@songs = current_user.favorites 

La première ligne est inutile et est remplacée par la deuxième ligne. Un problème similaire est dans songs#index.

Cependant, le problème à votre question est partielle, vous devez retirer le @ dans:

<%= link_to @song.name, favorite_path(song.id) %> 

Vous n'avez pas une variable @song (seulement @songs et song).

+0

Merci @Ryan! Je les ai retirés des chansons et des contrôleurs favoris. Mais malheureusement, votre solution n'a pas fonctionné. – Kurta