2016-10-31 3 views
1

Ich habe eine Ruby On Rails Weblog-Anwendung und bekomme ein NoMethodError in PostsController#show Problem beim Öffnen eines Beitrags. PostsController unter rails/weblog/app/controllersNoMethodError obwohl Methode wurde definiert

gespeichert ich undefined method 'set_current_page' for #<PostsController:0x007fb162831e70> jedoch set_current_page wie so definiert:

private 
    def set_current_page 
     @current_page = params[:page] || 1 
    end 
end 

und dann in einem before_action

before_action :set_current_page, except: [:index] 
before_action :set_post, only: [:show, :edit, :update, :destroy] 

Voll Stack-Trace verwendet:

activesupport (5.0.0.1) lib/active_support/callbacks.rb:382:in `block in make_lambda' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:150:in `block (2 levels) in halting_and_conditional' 
actionpack (5.0.0.1) lib/abstract_controller/callbacks.rb:12:in `block (2 levels) in <module:Callbacks>' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:454:in `block in call' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:454:in `each' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:454:in `call' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:101:in `__run_callbacks__' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:90:in `run_callbacks' 
actionpack (5.0.0.1) lib/abstract_controller/callbacks.rb:19:in `process_action' 
actionpack (5.0.0.1) lib/action_controller/metal/rescue.rb:20:in `process_action' 
actionpack (5.0.0.1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' 
activesupport (5.0.0.1) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (5.0.0.1) lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
activesupport (5.0.0.1) lib/active_support/notifications.rb:164:in `instrument' 
actionpack (5.0.0.1) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
actionpack (5.0.0.1) lib/action_controller/metal/params_wrapper.rb:248:in `process_action' 
activerecord (5.0.0.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
actionpack (5.0.0.1) lib/abstract_controller/base.rb:126:in `process' 
actionview (5.0.0.1) lib/action_view/rendering.rb:30:in `process' 
actionpack (5.0.0.1) lib/action_controller/metal.rb:190:in `dispatch' 
actionpack (5.0.0.1) lib/action_controller/metal.rb:262:in `dispatch' 
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch' 
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:32:in `serve' 
actionpack (5.0.0.1) lib/action_dispatch/journey/router.rb:39:in `block in serve' 
actionpack (5.0.0.1) lib/action_dispatch/journey/router.rb:26:in `each' 
actionpack (5.0.0.1) lib/action_dispatch/journey/router.rb:26:in `serve' 
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:725:in `call' 
rack (2.0.1) lib/rack/etag.rb:25:in `call' 
rack (2.0.1) lib/rack/conditional_get.rb:25:in `call' 
rack (2.0.1) lib/rack/head.rb:12:in `call' 
rack (2.0.1) lib/rack/session/abstract/id.rb:222:in `context' 
rack (2.0.1) lib/rack/session/abstract/id.rb:216:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/cookies.rb:613:in `call' 
activerecord (5.0.0.1) lib/active_record/migration.rb:552:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:97:in `__run_callbacks__' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks' 
activesupport (5.0.0.1) lib/active_support/callbacks.rb:90:in `run_callbacks' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:36:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call' 
web-console (3.4.0) lib/web_console/middleware.rb:135:in `call_app' 
web-console (3.4.0) lib/web_console/middleware.rb:28:in `block in call' 
web-console (3.4.0) lib/web_console/middleware.rb:18:in `catch' 
web-console (3.4.0) lib/web_console/middleware.rb:18:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' 
railties (5.0.0.1) lib/rails/rack/logger.rb:36:in `call_app' 
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `block in call' 
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `block in tagged' 
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:26:in `tagged' 
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `tagged' 
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `call' 
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/request_id.rb:24:in `call' 
rack (2.0.1) lib/rack/method_override.rb:22:in `call' 
rack (2.0.1) lib/rack/runtime.rb:22:in `call' 
activesupport (5.0.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.0.0.1) lib/action_dispatch/middleware/static.rb:136:in `call' 
rack (2.0.1) lib/rack/sendfile.rb:111:in `call' 
railties (5.0.0.1) lib/rails/engine.rb:522:in `call' 
puma (3.6.0) lib/puma/configuration.rb:225:in `call' 
puma (3.6.0) lib/puma/server.rb:578:in `handle_request' 
puma (3.6.0) lib/puma/server.rb:415:in `process_client' 
puma (3.6.0) lib/puma/server.rb:275:in `block in run' 
puma (3.6.0) lib/puma/thread_pool.rb:116:in `block in spawn_thread' 

Die Beiträge_co ntroller.rb Datei:

class PostsController < ApplicationController 
    before_action :set_current_page, except: [:index] 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    # GET /posts 
    # GET /posts.json 
    def index 
     @posts = Post.paginate(page: params[:page], 
          per_page: params[:per_page]) 
          .order('title, user_id') 
    end 

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

    # GET /posts/new 
    def new 
     @post = Post.new 
    end 

    # GET /posts/1/edit 
    def edit 
    end 

    # POST /posts 
    # POST /posts.json 
    def create 
     @post = Post.new(post_params) 
     @post.user = User.find_by email: params[:email] 

     respond_to do |format| 
      if @post.save 
       format.html { redirect_to (post_url(@post, page: @current_page)), notice: 'Post was successfully created.' } 
       format.json { render :show, status: :created, location: @post } 
      else 
       format.html { render :new } 
       format.json { render json: @post.errors, status: :unprocessable_entity } 
      end 
     end 
    end 

    # PATCH/PUT /posts/1 
    # PATCH/PUT /posts/1.json 
    def update 
     @post.user = User.find_by email: params[:email] 
     respond_to do |format| 
      if @post.update(post_params) 
       format.html { redirect_to (post_url(@post, page: @current_page)), notice: 'Post was successfully updated.' } 
       format.json { render :show, status: :ok, location: @post } 
      else 
       format.html { render :edit } 
       format.json { render json: @post.errors, status: :unprocessable_entity } 
      send 
     end 
    end 

    # DELETE /posts/1 
    # DELETE /posts/1.json 
    def destroy 
     @post.destroy 
     respond_to do |format| 
      format.html { redirect_to posts_url(page: @current_page), notice: 'Post was successfully destroyed.' } 
      format.json { head :no_content } 
     end 
    end 

    private 
     # Use callbacks to share common setup or constraints between actions. 
     def set_post 
      @post = Post.find(params[:id]) 
     end 

     def set_current_page 
      @current_page = params[:page] || 1 
     end 

     # Never trust parameters from the scary internet, only allow the white list through. 
     def post_params 
      params.require(:post).permit(:title, :body, :page) 
     end 
    end 
end 
+0

Die 'set_current_page' Definition ist in' posts_controller.rb'? Können Sie den vollständigen Stack-Trace einschließen? – SteveTurczyn

+0

Ein Stack-Trace und der gesamte Inhalt des Controllers wäre nützlich. – ArtOfCode

+0

Ja, set_current_page ist am Ende von posts_controller.rb definiert. Ich habe in der vollständigen Stack-Spur zu meinem ursprünglichen Post – user3091905

Antwort

2

Sie haben einen Tippfehler in Ihrer update Aktion - send statt end.

Dies bedeutet, dass Ruby alles danach als Teil dieser Update-Methode interpretiert - und außerhalb der Methode nicht definiert ist.

In Kombination mit der zusätzlichen end, die nach Ihrer Liste der privaten Methoden enthalten ist, bedeutet dies, dass Sie die richtige Anzahl ends haben, so dass kein Syntaxfehler angezeigt wird, aber die Klasse nicht so interpretiert wird, wie Sie erwarten.

Verwandte Themen