use*_*570 5 routes ruby-on-rails
我在使用scaffold生成的控制器中创建自己的动作时遇到了一些麻烦.
我理解一切都映射到了宁静的动作,但我正在构建一个用户控制器,用户可以登录/注销等,但是当我创建动作并在routes.rb中声明它时,当我访问用户/登录时出现此错误
Couldn't find User with id=login
Run Code Online (Sandbox Code Playgroud)
它尝试使用login作为ID参数,而不是将其用作操作.
的routes.rb
match 'users/login' => 'users#login'
Run Code Online (Sandbox Code Playgroud)
我觉得我在路线上做错了所以如果有人可以帮助我那会很棒.
谢谢
我假设你routes.rb看起来像这样:
resources :users
match 'users/login' => 'users#login'
Run Code Online (Sandbox Code Playgroud)
问题是Rails使用匹配的第一个路由.从文档:
Rails的路线在他们指定的顺序进行匹配,因此,如果你有
resources :photos一个以上get 'photos/poll'的show为行动的路线resources线将之前匹配get行.为了解决这个问题,移动get线上面的resources行,以便它首先匹配.
因此,要么在之前 定义自定义路由resources :users:
match 'users/login' => 'users#login'
resources :users
Run Code Online (Sandbox Code Playgroud)
...或使用此语法添加更多RESTful操作:
resources :users do
collection do
match 'login'
end
end
Run Code Online (Sandbox Code Playgroud)
要查看现有路由(及其顺序)rake routes,请从命令行运行.
| 归档时间: |
|
| 查看次数: |
6256 次 |
| 最近记录: |