Ruby on Rails:添加新路由

时间:2012-10-30 18:45:44

标签: ruby-on-rails ruby

我是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 个答案:

答案 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