Trình trợ giúp đường dẫn tạo đường dẫn bằng dấu chấm thay vì dấu gạch chéo


89

Trong các route.rb của tôi, tôi có những thứ sau:

resources :message_threads

Khi tôi gọi:

message_threads_path(1)

Tôi có:

/message_threads.1

Tại sao thế này? Các tài nguyên khác của tôi hoạt động tốt. Tôi không đa số hóa điều này một cách chính xác hay sao?

Câu trả lời:


142

Có, đây là một lỗi đa phương hóa.

Bằng cách chuyển ID 1, tôi giả sử rằng bạn muốn hiển thị một bản ghi duy nhất.

Vì vậy, bạn cần sử dụng 'message_thread' số ít:

message_thread_path(1)

Điều nào sẽ mang lại:

http://localhost:3000/message_threads/1

3
Heh. Điều đó đã xảy ra với tất cả chúng ta; thường xuyên. Có lẽ sẽ không phải là lần cuối cùng bạn gặp lỗi này!
Scott

Tôi gặp phải lỗi này rất giống với một tuyến đường đã đặt tên mà tôi đã tạo và tôi không đa dạng hóa nó. Cách khắc phục ở đó là gì?
kakubei

1
@kakubei, hãy kiểm tra tệp tuyến đường của bạn. Bạn đang gọi resources :my_modelhay resources :my_models? (Bạn cần phải phân bổ trong tệp các tuyến đường.)
JellicleCat

Tất cả các tuyến đường của tôi là đa nguyên.
kakubei

1
Mới đi 5h chiều, đang định vùi đầu vào bàn phím, thế này. Cảm ơn anh bạn.
Phantomwhale

19

Đôi khi đây cũng là khi bạn không cung cấp tham số: as trong tuyến đường của mình:

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

Thay đổi để:

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

(bỏ qua ví dụ kỳ quặc, chỉ tình cờ là thứ mà chúng tôi vừa gặp phải cho một ứng dụng nội bộ mà chúng tôi đang xây dựng)


4
Điều này đã làm việc cho tôi. Chỉ định : như đã cho tôi một cái tên mà tôi có thể thêm "_path" vào và để Rails biết tôi đang yêu cầu cái quái gì trong link_to. Ban đầu, khi tệp tuyến đường của tôi có: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] my view markup: <%= link_to "Show Details", xyz_show_path(@project) %> keep production: http://localhost:3000/xyz/show.1 Thay đổi tệp tuyến đường thành: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" allow: <%= link_to "Show Details", show_path(@project) %> hoạt động.
ayang

0

Những người khác đến đây có thể ở trong tình huống này:

Nếu bạn có một tài nguyên đơn lẻ được khai báo trong routes.rb:

resource :map

Bạn không cần phải chuyển một đối tượng đến map_path. Cố gắng gọi map_path(map)sẽ dẫn đến hành vi tương tự (tức là giống URL map.12).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.