Pembantu jalur menghasilkan jalur dengan titik, bukan garis miring

89

Di routes.rb saya, saya memiliki yang berikut:

resources :message_threads

Ketika saya menelepon:

message_threads_path(1)

Saya mendapat:

/message_threads.1

Kenapa ini? Sumber daya saya yang lain berfungsi dengan baik. Apakah saya tidak mem-pluralisasi ini dengan benar atau sesuatu?

ghempton
sumber

Jawaban:

142

Ya, ini adalah kesalahan jamak.

Dengan meneruskan ID 1, saya berasumsi bahwa Anda ingin menampilkan satu record.

Jadi, Anda perlu menggunakan 'message_thread' tunggal:

message_thread_path(1)

Yang akan menghasilkan:

http://localhost:3000/message_threads/1
Scott
sumber
3
Heh. Ini terjadi pada kita semua; sering. Mungkin bukan terakhir kali Anda melihat kesalahan ini!
Scott
Saya mendapatkan kesalahan yang sama ini dengan rute bernama yang saya buat dan saya tidak memajemukannya. Apa perbaikannya di sana?
kakubei
1
@kakubei, periksa file rute Anda. Apakah Anda menelepon resources :my_modelatau resources :my_models? (Anda perlu membuat jamak di file routes.)
JellicleCat
Semua rute saya jamak.
kakubei
1
Baru saja pergi jam 5 sore, hampir membenturkan kepala saya ke keyboard, ini dia. Terima kasih sobat.
Phantomwhale
19

Terkadang ini juga terjadi saat Anda tidak memberikan parameter: as di rute Anda:

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

Diubah menjadi:

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

(abaikan contoh ganjil, kebetulan terjadi sesuatu yang baru saja kita temui untuk aplikasi internal yang sedang kita buat)

Jamon Holmgren
sumber
4
Ini berhasil untuk saya. Menentukan : as memberi saya nama yang bisa saya tambahkan "_path" ke dan membuat Rails tahu apa yang saya minta di link_to. Awalnya, ketika file rute saya memiliki: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] markup tampilan saya: <%= link_to "Show Details", xyz_show_path(@project) %> terus menghasilkan: http://localhost:3000/xyz/show.1 Mengubah file rute menjadi: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" diizinkan: <%= link_to "Show Details", show_path(@project) %> berfungsi.
ayang
0

Orang lain yang mendarat di sini mungkin berada dalam situasi ini:

Jika Anda memiliki sumber daya tunggal yang dideklarasikan di routes.rb:

resource :map

Anda tidak perlu mengirimkan objek ke map_path. Mencoba menelepon map_path(map)akan menghasilkan perilaku yang serupa (misalnya seperti URL map.12).

techpeace
sumber