路径助手使用点而不是斜线生成路径

ghe*_*ton 86 ruby-on-rails ruby-on-rails-3

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

resources :message_threads
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

message_threads_path(1)
Run Code Online (Sandbox Code Playgroud)

我明白了:

/message_threads.1
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我的其他资源运作正常.我没有正确地复数这个或什么?

Sco*_*ott 130

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

通过传递ID 1,我假设您希望显示单个记录.

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

message_thread_path(1)
Run Code Online (Sandbox Code Playgroud)

哪个会产生:

http://localhost:3000/message_threads/1
Run Code Online (Sandbox Code Playgroud)

  • 嘿.它发生在我们所有人身上; 经常.可能不会是你最后一次看到这个错误! (3认同)

Jam*_*ren 17

有时这也是当你没有在你的路线中提供:作为参数时:

delete "delete/:id" => "home#delete"
Run Code Online (Sandbox Code Playgroud)

变成:

delete "delete/:id" => "home#delete", as: :delete
Run Code Online (Sandbox Code Playgroud)

(忽略这个奇怪的例子,恰好是我们刚刚为我们正在构建的内部应用程序遇到的事情)

  • 这对我有用.指定**:as**给了我一个名字,我可以追加"_path"并让Rails知道我在link_to中要求的是什么.最初,当我的路径文件有:`match"/ xyz/show /:project_id"=>"xyz#show_project",:via => [:get]`我的视图标记:`<%= link_to"显示详细信息", xyz_show_path(@project)%>`继续生成:`http:// localhost:3000/xyz/show.1`将routes文件更改为:`match"/ xyz/show /:project_id"=>"xyz#show_project" ,:via => [:get],:as =>"show"`allowed:`<%= link_to"Show Details",show_path(@project)%>`工作. (4认同)