uninitialized constant PostsController - Integration Acts as Votable

时间:2014-06-29 09:40:56

标签: ruby-on-rails routes

我正在将acts_as_votable整合到我的模型的元素中,而我几乎就在那里但是我遇到了一些缺少路线的问题。据我所知other question,在提升我的一个模型元素后,该应用程序将被重定向到:post。我试图包括资源:黑客和资源:黑客(已经存在)但似乎不是解决方案。

的routes.rb

      Rails.application.routes.draw do
        resources :hacks do
          member do
            put "like", to: "posts#upvote"
          end
        end

        devise_for :users, :controllers => { omniauth_callbacks: 'omniauth_callbacks' }
        match '/profile/:id/finish_signup' => 'users#finish_signup', via: [:get, :patch], :as => :finish_signup

        match 'tagged' => 'hacks#tagged', :as => 'tagged', via: 'get'
        #To show public profiles
        get '/users/:id', :to => "users#show", :as => :user

        root "pages#home"

        get 'pages/about'

        # TheComments routes
        concern   :user_comments,  TheComments::UserRoutes.new
        concern   :admin_comments, TheComments::AdminRoutes.new
        resources :comments, concerns:  [:user_comments, :admin_comments]

      end

黑客秀

            <p>
              <strong>Liked by: </strong>
             <%= @hack.liked_by @user %>
             <%= link_to "Favorite?", like_hack_path(@hack), method: :put, class: "button tiny" %>

            </p>

黑客控制器

    class HacksController < ApplicationController
      before_action :set_hack, only: [:show, :edit, :update, :destroy]
      before_action :authenticate_user!, except: [:new]

      # GET /hacks
      # GET /hacks.json
      def index
        @hacks = Hack.all
      end

      # GET /hacks/1
      # GET /hacks/1.json
      def show
         @hack     = Hack.find params[:id]
         @comments = @hack.comments.with_state([:draft, :published])
      end

      # GET /hacks/new
      def new
        @hack = current_user.hacks.build
      end

      # GET /hacks/1/edit
      def edit
      end

      # POST /hacks
      # POST /hacks.json
      def create
        @hack = current_user.hacks.build(hack_params)

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

      def upvote

        @hack = Hack.find(params[:id])
        @hack.liked_by current_user
        redirect_to @hack
      end  

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

      def tagged
        if params[:tag].present? 
          @hacks = Hack.tagged_with(params[:tag])
        else 
          @hacks = Hack.postall
        end  
      end

      # DELETE /hacks/1
      # DELETE /hacks/1.json
      def destroy
        @hack.destroy
        respond_to do |format|
          format.html { redirect_to hacks_url, notice: 'Hack was successfully destroyed.' }
          format.json { head :no_content }
        end
      end

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

        def correct_user
          @hack = current_user.hacks.find_by(id: params[:id])
          redirect_to hacks_path, notice: "Not authorized to edit this hack" if @hack.nil?
        end

        # Never trust parameters from the scary internet, only allow the white list through.
        def hack_params
          params.require(:hack).permit(:description, :image, :url, :tag_list)
        end
    end

ActionController :: RoutingError at / hacks / 1 / like 未初始化的常量PostsController

完整跟踪

    Started PUT "/hacks/1/like" for 127.0.0.1 at 2014-06-29 12:05:51 +0200

    ActionController::RoutingError - uninitialized constant PostsController:
      actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:69:in `rescue in controller'
      actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:64:in `controller'
      actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:44:in `call'
      actionpack (4.1.1) lib/action_dispatch/journey/router.rb:71:in `block in call'
      actionpack (4.1.1) lib/action_dispatch/journey/router.rb:59:in `call'
      actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:676:in `call'
      omniauth (1.2.1) lib/omniauth/strategy.rb:186:in `call!'
      omniauth (1.2.1) lib/omniauth/strategy.rb:164:in `call'
      warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
      warden (1.2.3) lib/warden/manager.rb:34:in `call'
      rack (1.5.2) lib/rack/etag.rb:23:in `call'
      rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
      rack (1.5.2) lib/rack/head.rb:11:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/flash.rb:254:in `call'
      rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
      rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'
      activerecord (4.1.1) lib/active_record/query_cache.rb:36:in `call'
      activerecord (4.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
      activerecord (4.1.1) lib/active_record/migration.rb:380:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
      activesupport (4.1.1) lib/active_support/callbacks.rb:82:in `run_callbacks'
      actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/reloader.rb:73:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
      better_errors (1.1.0) lib/better_errors/middleware.rb:56:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
      railties (4.1.1) lib/rails/rack/logger.rb:38:in `call_app'
      railties (4.1.1) lib/rails/rack/logger.rb:20:in `block in call'
      activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
      activesupport (4.1.1) lib/active_support/tagged_logging.rb:26:in `tagged'
      activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `tagged'
      railties (4.1.1) lib/rails/rack/logger.rb:20:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
      rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
      rack (1.5.2) lib/rack/runtime.rb:17:in `call'
      activesupport (4.1.1) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
      rack (1.5.2) lib/rack/lock.rb:17:in `call'
      actionpack (4.1.1) lib/action_dispatch/middleware/static.rb:64:in `call'
      rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
      railties (4.1.1) lib/rails/engine.rb:514:in `call'
      railties (4.1.1) lib/rails/application.rb:144:in `call'
      rack (1.5.2) lib/rack/lock.rb:17:in `call'
      rack (1.5.2) lib/rack/content_length.rb:14:in `call'
      rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
       () Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
       () Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
       () Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'

1 个答案:

答案 0 :(得分:1)

您没有PostsController,根据我的意见,您想要更改此行:

put "like", to: "posts#upvote"

put "like", to: "hacks#upvote"

因为我认为您希望它指向HacksController,因为那是upvote操作的位置。