我是RoR的新手所以这是一个新手问题:
如果我有一个控制器users_controller.rb
并且我添加了一个方法foo
,它不应该创建这条路线吗?
因为当我这样做时,我收到了这个错误:
无法找到ID = foo
的用户
我当然添加了一个视图foo.html.erb
修改
我在routes.rb
添加了此代码,但我收到了同样的错误:
resources :users do
get "signup"
end
答案 0 :(得分:16)
这在rails 3中不会自动运行。您需要添加
resource :users do
get "foo"
end
到您的routes.rb
你肯定想看看http://guides.rubyonrails.org/routing.html,它很好地解释了路由。
答案 1 :(得分:5)
Rails正在引导你进入show控制器并认为你提供foo为:show param to show action。
您需要设置一个路由,该路由将在用户匹配之前调度为/ users /:id#show
您可以通过添加以下内容来修改config/routes.rb
以替换描述:users
resource :users do
get "foo"
end
答案 2 :(得分:2)
只是为了添加其他答案,在早期版本的Rails中,曾经有一个默认路由
match ':controller(/:action(/:id))(.:format)'
给出了您描述的行为 controller / action 形式的请求将在给定控制器上调用给定方法的行为。此行仍在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.
答案 3 :(得分:1)
在架构':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