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

时间:2018-06-11 04:21:00

标签: ruby-on-rails ruby-on-rails-5

这是我收到的错误:uninitialized constant SellController,当我尝试转到此网址时: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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

因为您的sell路由正在尝试查找控制器

`app/controllers/sell_controller.rb`

而您的控制器位于port_sockets目录中。

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

您可以触发rails routes并查看您的路由将请求发送到哪个控制器。

答案 2 :(得分:1)

修改您的路线:

namespace :port_stocks do
  resources :sell
  resources :buy
end