【问题标题】:Path helpers generate paths with dots instead of slashes路径助手使用点而不是斜线生成路径
【发布时间】:2011-04-15 08:21:19
【问题描述】:

在我的 routes.rb 中,我有以下内容:

resources :message_threads

当我打电话时:

message_threads_path(1)

我明白了:

/message_threads.1

这是为什么?我的其他资源工作正常。我没有正确地复数吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    是的,这是一个复数错误。

    通过传递 ID 1,我假设您希望显示一条记录。

    所以你需要使用单数的'message_thread':

    message_thread_path(1)
    

    这将产生:

    http://localhost:3000/message_threads/1
    

    【讨论】:

    • 嘿。它发生在我们所有人身上;频繁地。可能不会是您最后一次看到此错误!
    • 我在创建命名路由时遇到了同样的错误,但我没有将其复数。那里的解决办法是什么?
    • @kakubei,检查你的路线文件。你打电话给resources :my_model 还是resources :my_models? (您需要在路由文件中使用复数形式。)
    • 我所有的路线都是复数形式。
    • 下午 5 点刚走,我正要把头撞在键盘上,就是这样。谢谢大佬。
    【解决方案2】:

    有时这也是当您没有在路由中提供 :as 参数时:

    delete "delete/:id" => "home#delete"
    

    改为:

    delete "delete/:id" => "home#delete", as: :delete
    

    (忽略这个奇怪的例子,恰好是我们在构建内部应用时遇到的问题)

    【讨论】:

    • 这对我有用。指定 :as 给了我一个名称,我可以将“_path”附加到并让 Rails 知道我在 link_to 中到底要什么。最初,当我的路线文件有:match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] 我的视图标记:<%= link_to "Show Details", xyz_show_path(@project) %> 一直在生产:http://localhost:3000/xyz/show.1 将路线文件更改为:match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" 允许:<%= link_to "Show Details", show_path(@project) %> 工作。
    【解决方案3】:

    其他登陆这里的人可能处于这种情况:

    如果您在 routes.rb 中声明了单一资源:

    resource :map
    

    您不需要将对象传递给map_path。尝试调用 map_path(map) 将导致类似的行为(即像 map.12 这样的 URL)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多