首页 > 解决方案 > Rails:不支持的控制器名称

问题描述

我命名路线的方式有什么问题?

我是否需要将文件夹结构和模块名称更改为

:car_registration

/app/controllers/car_registration/steps_controller.rb

如果可能的话,我更喜欢使用我拥有的格式。

路线

  scope module: 'CarRegistration' do
    resources :steps
  end

控制器

/app/controllers/CarRegistration/steps_controller.rb

module CarRegistration
  class StepsController < ApplicationController
    include Wicked::Wizard
    steps :step1, :step2, step3

    def show
      @form_object_model ||= form_object_model_for_step(step)
      render_wizard
    end

    def update
      @form_object_model = form_object_model_for_step(step)
      render_wizard @form_object_model
    end

    private

    def form_object_model_for_step(step)
      "CarRegistration::#{step.camelize}".constantize.new      
    end

  end
end

错误

'CarRegistration/steps' 不是受支持的控制器名称。这可能导致潜在的路由问题。请参阅 http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use (ArgumentError)

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

解决方案


看起来你至少有两个问题。您正在使用如下文件夹结构:

app/controllers/CarRegistration/steps_controller.rb

这是非常规的。相反,它应该是:

app/controllers/car_registration/steps_controller.rb

然后,您的路线应如下所示:

scope module: :car_registration do 
  resources :steps
end

推荐阅读