2016-10-03 5 views
0

Ich arbeite an einem Projekt, und für das Leben von mir bin ich mir nicht sicher, was los ist. Mein Code wurde früher arbeiten, jetzt bin ichNoMethodError in MoviesController # upvote

NoMethodError in MoviesController#upvote

bekommen Wenn ich versuche und Abstimmung über einen bestimmten Film, hier ist mein „movie_controller.rb“

class MoviesController < ApplicationController 
    before_action :set_movie, only: [:show, :edit, :update, :destroy, :upvote, :downvote] 
    before_action :authenticate_user! 


    # GET /movies 
    # GET /movies.json 
    def index 
    @movies = Movie.all 
    end 

    # GET /movies/1 
    # GET /movies/1.json 
    def show 
    end 

    # GET /movies/new 
    def new 
    @movie = Movie.new 
    end 

    # GET /movies/1/edit 
    def edit 
    end 

    # POST /movies 
    # POST /movies.json 
    def create 
    @movie = Movie.new(movie_params) 

    respond_to do |format| 
     if @movie.save 
     format.html { redirect_to @movie, notice: 'Movie was successfully created.' } 
     format.json { render :show, status: :created, location: @movie } 
     else 
     format.html { render :new } 
     format.json { render json: @movie.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /movies/1 
    # PATCH/PUT /movies/1.json 
    def update 
    respond_to do |format| 
     if @movie.update(movie_params) 
     format.html { redirect_to @movie, notice: 'Movie was successfully updated.' } 
     format.json { render :show, status: :ok, location: @movie } 
     else 
     format.html { render :edit } 
     format.json { render json: @movie.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /movies/1 
    # DELETE /movies/1.json 
    def destroy 
    @movie.destroy 
    respond_to do |format| 
     format.html { redirect_to movies_url, notice: 'Movie was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    def upvote 
    @movie.upvote_from current_user 
    redirect_to movies_path 
    end 

    def downvote 
    @movie.downvote_from current_user 
    redirect_to movies_path 
    end 

    private 
    def set_movie 
     @movies = Movie.find(params[:movie_id]) 
    end 


    # Never trust parameters from the scary internet, only allow the white list through. 
    def movie_params 
     params.require(:movie).permit(:title, :image) 
    end 
end 

Insbesondere ist es sagen, es ist ein Problem, mit ist Linie:

private 
    def set_movie 
     @movies = Movie.find(params[:id]) 
    end 

Ich werde auch meine Routen für ein gutes Maß anhängen. Danke Jungs.

Rails.application.routes.draw do 
    devise_for :users 
    root 'home#index' 

    resources :movies do 

    put "like", to: "movies#upvote" 
    put "unlike", to: "movies#downvote" 
    end 
end 
+0

würden Sie den vollständigen Stapel des Fehlers hinzufügen? – geekazoid

+0

Hey @ geekazoid, hier gehen Sie 'nicht definierte Methode upvote_from‘ für nil: NilClass def upvote @ movie.upvote_from current_user redirect_to movies_path end' – Montana

+0

Das ist nicht der volle Stack-Trace des Fehlers, aber jetzt habe ich das bekommen Idee. Ich poste es als Antwort. – geekazoid

Antwort

0

Das Problem ist, dass Sie eine @movies Variable statt @movie setzen. Deshalb sollten Sie sich einen dieser Teil des Codes undefined method upvote_from' for nil:NilClass def upvote @movie.upvote_from

ändern bekommen

private 
def set_movie 
    @movies = Movie.find(params[:id]) 
end 

dieser

private 
def set_movie 
    @movie = Movie.find(params[:id]) 
end 
+0

Danke Bruder, das schien den Trick zu machen. :) – Montana

+0

@MontanaMendy Bitte markieren Sie die Antwort als richtig, wenn ja. Bitte schön. – geekazoid