路径助手生成带点而不是斜线的路径


89

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

resources :message_threads

当我打电话时:

message_threads_path(1)

我得到:

/message_threads.1

为什么是这样?我的其他资源工作正常。我不正确地将此复数吗?

Answers:


142

是的,这是一个多元错误。

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

因此,您需要使用单数“ message_thread”:

message_thread_path(1)

这将产生:

http://localhost:3000/message_threads/1

3
嘿。它发生在我们所有人身上;经常。可能不会是您最后一次看到此错误!
Scott

我在创建的命名路由中遇到了同样的错误,并且没有对其进行复数处理。那里的解决办法是什么?
kakubei 2012年

1
@kakubei,请检查您的路线文件。你在打电话resources :my_model还是resources :my_models?(您需要在路由文件中将其复数。)
JellicleCat 2013年

我所有的路线都是多元化的。
kakubei

1
下午5点才去,正要把我的头撞在键盘上,就是这样。谢啦。
幻影鲸鱼

19

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

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

变成:

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

(忽略奇怪的例子,碰巧是我们为我们正在构建的内部应用程序遇到的问题)


4
这对我有用。指定: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) %> 工作。
2013年

0

住在这里的其他人可能处于这种情况:

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

resource :map

您无需将对象传递给map_path。尝试拨打电话map_path(map)会导致类似的行为(例如,网址为map.12)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.