パスヘルパーはスラッシュの代わりにドットでパスを生成します


89

私のroutes.rbに私は次のようにしています:

resources :message_threads

私が電話するとき:

message_threads_path(1)

私は得ます:

/message_threads.1

どうしてこれなの?私の他のリソースは正常に動作します。これを正しく複数形化していないのですか?

回答:


142

はい、これは複数形エラーです。

ID 1を渡すことで、1つのレコードを表示したいとします。

したがって、単一の「message_thread」を使用する必要があります。

message_thread_path(1)

どちらが得られます:

http://localhost:3000/message_threads/1

3
へえ。それは私たち全員に起こります。頻繁に。このエラーが表示されるのは、おそらく最後ではありません。
Scott

私が作成した名前付きルートでこれと同じエラーが発生し、それを複数化していません。そこでの修正は何でしょうか?
角兵衛2012

1
@カクベイ、ルートファイルをチェックしてください。あなたは、呼び出していますresources :my_modelresources :my_models?(routesファイルで複数形にする必要があります。)
JellicleCat 2013

私のルートはすべて複数形です。
角兵衛2013

1
午後5時過ぎに、キーボードに頭をぶつけようとしていました。ありがとう。
Phantomwhale 2013年

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) %> 機能します。
アヤン

0

ここに上陸した他の人々はこの状況にあるかもしれません:

で単一のリソースが宣言されている場合routes.rb

resource :map

オブジェクトをに渡す必要はありませんmap_path。呼び出しmap_path(map)を試みると、同様の動作になります(つまり、のようなURL map.12)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.