【问题标题】:Rails "automatic" routes don't work, must specify with get "controller/method" every time?Rails“自动”路线不起作用,每次都必须指定get“控制器/方法”吗?
【发布时间】:2012-06-21 17:05:58
【问题描述】:

我做到了

rails generate controller home index

但它会将这一行添加到我的 routes.rb 中

get "home/index"

我认为 Rails 可以自动从 URL 推断出控制器/方法?为什么我需要指定每个获取/发布页面?

这是我完整的 routes.rb 文件:

Callisto2::Application.routes.draw do
  root :to => "home#index"
  resources :assets
end

root "/" 工作正常。 /assets/* 也是如此。

/home/index 有什么问题?我得到错误:

路由错误

No route matches [GET] "/home/index"

尝试运行 rake 路线以获取有关可用路线的更多信息。

rake routes(以 apache 用户身份运行)给我以下输出:

root  / home#index

感谢您的澄清。不知道我错过了什么。

编辑:我没有说清楚:我从 routes.rb 手动删除 get /home/index 以保持该文件干净。

【问题讨论】:

    标签: ruby-on-rails-3 routes


    【解决方案1】:

    Rails 用于在您的路线文件底部添加所谓的 catch all 路线:

    match ':controller(/:action(/:id(.:format)))'
    

    这些 url 没有任何“自动”或神奇之处,只是每个 rails 应用程序都在其 routes.rb 中使用此路由开始

    这已经失宠,至少部分是因为它使一切都可以通过 get 访问,而

    resources :books
    

    使用适当的 http 动词添加每个路由。与 rails 刚开始时相比,显式列出路由也少了很多。

    【讨论】:

    • 所以 rail generate 应该在我的路线中添加了“资源主页”,但是因为这会暴露所有内容(即,未来可能不会像 'home/doX' 这样的路由方法将是可用)
    • 如果你用脚手架模型 rails 添加资源丰富的路线。如果不是,它不会对你在做什么做任何假设,只是为你传递给生成器的操作设置路由
    【解决方案2】:

    如果您的控制器是home 并且操作是index,那么您的路径就是/home

    您可以找到更多信息here

    【讨论】:

    • 这里的菜鸟,是的,我现在明白了。由于我过去的经验,我希望 /home/ 调用 index 方法,但它实际上调用 /home/show?id=index ,它不存在。我在手动添加资源 :home 到 route.rb 后发现了这一点
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多