我是 RoR 的新手,所以这是一个新手问题:
如果我有一个控制器users_controller.rb
并且我添加了一个方法foo
,它不应该创建这条路线吗?
因为当我这样做时,我得到了这个错误:
找不到 id=foo 的用户
我当然添加了一个视图foo.html.erb
编辑:
我添加到routes.rb
这段代码,但我得到了同样的错误:
resources :users do
get "signup"
end
我是 RoR 的新手,所以这是一个新手问题:
如果我有一个控制器users_controller.rb
并且我添加了一个方法foo
,它不应该创建这条路线吗?
因为当我这样做时,我得到了这个错误:
找不到 id=foo 的用户
我当然添加了一个视图foo.html.erb
编辑:
我添加到routes.rb
这段代码,但我得到了同样的错误:
resources :users do
get "signup"
end
这在 rails 3 中不会自动工作。您需要添加
resource :users do
get "foo"
end
到你的 routes.rb
你肯定想看看http://guides.rubyonrails.org/routing.html,它很好地解释了路由。
Rails 将您引导至显示控制器,并认为您将 foo 作为 :id 参数提供给显示操作。
您需要在 users#show 中设置一个将在匹配为 /users/:id 之前调度的路由
您可以config/routes.rb
通过添加以下内容来替换现有资源描述来完成此操作:users
resource :users do
get "foo"
end
只是为了添加其他答案,在早期版本的 Rails 中曾经有一个默认路由
match ':controller(/:action(/:id))(.:format)'
它给出了您描述的行为,表单控制器/动作的请求将在给定控制器上调用给定方法。此行仍然存在,routes.rb
但默认情况下已注释掉。您可以取消注释以启用此行为,但上面的注释解释了为什么不建议这样做:
# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
在架构':controller/:action(.:format)'
中,您还可以轻松地执行以下操作
resources :users do
get "foo", on: :collection
end
或者
resources :users do
collection do
get 'foo'
end
end
http://guides.rubyonrails.org/routing.html#adding-collection-routes