我刚刚开始学习Ruby on Rails并获得了第一版第3章第151页的第7章。
我按如下方式生成控制器; $ rails生成控制器ControllerName [actions] [options]。 这个工作正常,但当我试图为用户生成一个控制器
$ rails生成控制器用户。 我收到以下错误消息。 /routing/mapper.rb:328:in check_part:缺少:路由定义上的控制器密钥,请检查您的路由。 (引发ArgumentError)。
这就是我的路线看起来像
Rails.application.routes.draw do
get 'controller_name/[actions]'
get 'controller_name/[options]
root :to => "articles#index"
resources :articles
root :to => 'users#show'
端**
我添加了最后一条路线(root:to =>'users#show')
Stackoverflow社区非常棒。我从档案馆得到了很多帮助。
由于
答案 0 :(得分:2)
您的问题出在rails g controller ControllerName [actions] [options]
。
这将生成路由和帮助程序,规范文件以及各种各样的东西。问题是[options]
和[actions]
将成为控制器中的方法名称,这些名称不是有效的ruby方法名称,并且路由get 'controller_name/[options]'
不是有效路由。尝试删除路线:
get 'controller_name/[actions]'
get 'controller_name/[options]'
那应该清除你的错误。
通常,您希望路线具有以下形式:
method 'path/to/route', to: 'controller#action'
e.g.
get '/my_new_api', to: 'api#my_new_api', as: :my_new_api
# Sets a route of a GET request to '/my_new_api' referencing
# the my_new_api method in the api controller.
这就是你得到错误的原因,你没有正确指定控制器。
Here's指向Rails路由的链接。你可以在那里看到路线的基本形式。
但最终,要解决您的问题,可能需要运行rails destroy命令:
rails d controller ControllerName [actions] [options]
或者从命令行中删除错误的文件。
如果您使用的是git
,它们会很容易看到,git status
看起来会像这样:
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/assets/javascripts/controller_name.js
app/assets/stylesheets/controller_name.scss
app/controllers/controller_name_controller.rb
app/helpers/controller_name_helper.rb
app/views/controller_name/
spec/controllers/
spec/helpers/
spec/views/
欢迎来到SO! : - )
哦,here是指向rails generate
命令的文档的链接。
此外,方便的是,您只需在命令行中键入rails generate
,它就会显示许多选项,您可以键入rails generate controller
以获取有关控制器的更多特定选项和示例。
答案 1 :(得分:1)
不确定为什么原始答案如此冗长。请进行以下更改。而不是:
Rails.application.routes.draw do
get 'controller_name/[actions]'
get 'controller_name/[options]
root :to => "articles#index"
resources :articles
root :to => "users#show"
end
这样做:
Rails.application.routes.draw do
root :to => "articles#index"
# Or
root :to => "users#show"
get 'controller_name#[actions]'
get 'controller_name#[options]
resources :articles
end
主要问题是您的路线需要#
而不是/
。
您遇到的另一个问题是,root
告诉您的应用在用户到达主页时将用户发送到哪里,即应用的根目录。因此,您只能为根指定一个操作。
答案 2 :(得分:0)
更正生成控制器的命令 行动:
rails generate controller ControllerName [actions] [action2] ...
没有行动
rails generate controller ControllerName
在路线中只有一个根网址。