代码之家  ›  专栏  ›  技术社区  ›  marcamillion blelump

为什么我会得到这个未初始化的常量错误?

  •  0
  • marcamillion blelump  · 技术社区  · 6 年前

    这是我得到的错误: uninitialized constant SellController ,当我尝试转到此URL时: http://localhost:3000/port_stocks/6/sell/new

    这是我的路线:

      resources :port_stocks do
        resources :sell
      end
    
      namespace :port_stocks do
        resources :buy
      end
    

    这是我的 app/controllers/port_stocks/sell_controller.rb

    class SellController < ApplicationController
    
      def show
      end
    
      def create
        # Lots of code here
      end
    
      private
        # Use callbacks to share common setup or constraints between actions.
        def set_port_stock
          @port_stock = PortStock.find(params[:id])
        end
    
        def set_portfolio
          @portfolio = current_user.portfolio
        end
    
        # Never trust parameters from the scary internet, only allow the white list through.
        def port_stock_params
          params.require(:port_stock).permit(:portfolio_id, :stock_id, :volume, :purchase_price, :current_price, :percent_change, :bought_on, :action)
        end
    end
    

    这是什么原因?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Rajesh V    6 年前

    似乎您正在寻找嵌套路由,在这种情况下,您的控制器需要位于

    app/controllers/sell_controller.rb
    

    app/controllers/port_stocks/sell_controller.rb
    

    这种层次结构用于命名空间,类似于..

    namespace :admin do
      resources :articles, :comments
    end
    

    将查找嵌套的路由。

    resources :articles do
      resources :comments
    end
    
        2
  •  1
  •   Kartikey Tanna    6 年前

    因为你 sell 路由正在尝试找到控制器

    `app/controllers/sell_controller.rb`
    

    而你的控制器在 port_sockets 目录。

    嵌套路由不查找嵌套控制器。你可以看看 docs

    你可以开枪 rails routes 并查看您的路由将请求发送到的控制器。

        3
  •  1
  •   Abhilash Reddy    6 年前

    将您的路由修改为:

    namespace :port_stocks do
      resources :sell
      resources :buy
    end