Ruby on Rails:添加新路由

l2osamch  于 2023-10-17  发布在  Ruby
关注(0)|答案(4)|浏览(135)

我是新手,所以这是一个新手问题:
如果我有一个控制器users_controller.rb,我添加了一个方法foo,它不应该创建这个路由吗?
http://www.localhost:3000/users/foo
因为当我这么做的时候,我得到了这个错误:
找不到ID=foo的用户
我当然添加了视图foo.html.erb

编辑:

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

resources :users do
    get "signup"
  end
5uzkadbs

5uzkadbs1#

这在rails 3中不会自动工作。你需要加上

resource :users do
    get "foo"
end

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

hzbexzde

hzbexzde2#

Rails会将您引导到show控制器,并认为您正在为show操作提供foo as:id参数。
您需要在users#show中设置一个路由,该路由将在被匹配为/users/:id之前被调度
您可以通过添加以下内容来修改config/routes.rb,以替换现有的描述:users的资源,从而实现此目的

resource :users do
    get "foo"
end
new9mtju

new9mtju3#

再补充一下,在早期版本的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.
uinbv5nw

uinbv5nw4#

在模式':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

相关问题