2016-10-03 32 views
0

我正在开发一个项目,对于我的生活,我不知道发生了什么。我的代码早些时候的工作,现在我越来越MoviesController中的NoMethodError#upvote

NoMethodError in MoviesController#upvote

当我尝试在某个电影票,这是我的“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 

特别是它的说法有问题与线是:

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

我也将附加我的路线为好措施。感谢你们。

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

将你添加的错误的完整堆栈的一部分? – geekazoid

+0

嘿@ geekazoid,在这里你去'未定义的方法upvote_from”的零:NilClass 高清给予好评 @ movie.upvote_from CURRENT_USER redirect_to的movies_path end' – Montana

+0

这不是错误的完整堆栈跟踪,但现在我得到的理念。我发布它作为答案。 – geekazoid

回答

0

的问题是,你设置一个@movies变量,而不是@movie。这就是为什么你得到一个undefined method upvote_from' for nil:NilClass def upvote @movie.upvote_from

更改代码

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

这个

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

感谢兄弟,这似乎在伎俩。 :) – Montana

+0

@MontanaMendy请标记答案是正确的,如果是这样的话。不用谢。 – geekazoid