6

我是 RoR 的新手,所以这是一个新手问题:
如果我有一个控制器users_controller.rb并且我添加了一个方法foo,它不应该创建这条路线吗?

http://www.localhost:3000/users/foo

因为当我这样做时,我得到了这个错误:

找不到 id=foo 的用户

我当然添加了一个视图foo.html.erb

编辑:
我添加到routes.rb这段代码,但我得到了同样的错误:

resources :users do
    get "signup"
  end
4

4 回答 4

19

这在 rails 3 中不会自动工作。您需要添加

resource :users do
    get "foo"
end

到你的 routes.rb

你肯定想看看http://guides.rubyonrails.org/routing.html,它很好地解释了路由。

于 2012-10-30T18:47:53.373 回答
6

Rails 将您引导至显示控制器,并认为您将 foo 作为 :id 参数提供给显示操作。

您需要在 users#show 中设置一个将在匹配为 /users/:id 之前调度的路由

您可以config/routes.rb通过添加以下内容来替换现有资源描述来完成此操作:users

resource :users do
    get "foo"
end
于 2012-10-30T18:49:04.797 回答
3

只是为了添加其他答案,在早期版本的 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.
于 2012-10-30T19:07:45.767 回答
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

于 2016-01-19T13:40:57.200 回答