2010-06-23 25 views
11

tôi có các tuyến đường sau thành lập trong tập tin routes.rb của tôi:Rails bỏ qua tuyến đường bộ sưu tập và đi với chương trình hành động thay vì

resources :people do 
    collection do 
    get :search 
    end 
end 

Khi tôi làm một hành động get trên url: http://localhost:3000/people/search.json?term=stepeb, báo cáo máy chủ rằng nó phản hồi với hành động hiển thị, với tham số cụm từ chính xác, nhưng cũng có thông số id, được đặt thành "tìm kiếm".

Vấn đề, như tôi nhìn thấy nó, là hai url url chương trình sẽ là:

/people/:id 

và tôi tin rằng các bộ định tuyến được phù hợp với lộ trình mà trước khi nó được cho/người/tìm kiếm

Nếu đúng như vậy, các tuyến đường dựa trên bộ sưu tập sẽ hoạt động như thế nào? Họ sẽ không bị bắt bởi hành động hiển thị?

Phần liên quan của tuyến đường cào như sau:

search_people GET  /people/search(.:format)               {:action=>"search", :controller=>"people"} 
            GET  /people(.:format)                {:action=>"index", :controller=>"people"} 
           people POST  /people(.:format)                {:action=>"create", :controller=>"people"} 
          new_person GET  /people/new(.:format)               {:action=>"new", :controller=>"people"} 
            GET  /people/:id(.:format)               {:action=>"show", :controller=>"people"} 
            PUT  /people/:id(.:format)               {:action=>"update", :controller=>"people"} 
           person DELETE /people/:id(.:format)               {:action=>"destroy", :controller=>"people"} 
         edit_person GET  /people/:id/edit(.:format)              {:action=>"edit", :controller=>"people"} 
+2

Không chắc chắn vấn đề là gì, nhưng điều này chắc chắn sẽ hoạt động như bạn mong đợi. (Tôi tự hỏi, nếu định dạng .json đang gây ra vấn đề.) Bạn có thể cho chúng ta kết quả của 'các tuyến đường rake' không? –

+0

Tôi đã thêm .json khi tôi thấy nó không hoạt động theo cách dự định. Không tạo nên sự khác biệt. – midas06

Trả lời

21

Đừng quên điều này. Hóa ra tôi có một tài nguyên trùng lặp: dòng người ở đầu tệp tuyến đường. Rails đã đánh đầu tiên. Dường như với tôi có thực sự cần phải là một kiểm tra định nghĩa tuyến đường trùng lặp trong đó.

+0

Đã lưu ngày của tôi. Trong routes.rb với hơn 1000 dòng :) –

+0

Cảm ơn midas .. Loại bỏ các tài nguyên trùng lặp và làm việc tuyệt vời của nó. Tôi đã vật lộn kể từ hôm qua. Cảm ơn một lần nữa :) –

+0

Tuyệt vời, cảm ơn !!! – astgtciv

0

Phiên bản nào của Rails là bạn đang chạy? Hãy thử tạo một ứng dụng thử nghiệm chỉ với mã bạn đã cung cấp ở đây và xem nó có hoạt động hay không. Có thể có điều gì khác gây ra xung đột mà bạn chưa đề cập đến.

Sử dụng mã của bạn on Rails 3.0.0beta4 sản xuất các kết quả mong muốn:

Started GET "/people/search.json?term=boo" for 192.168.1.2 at 2010-06-23 03:39:26 -0400 
    Processing by PeopleController#search as JSON 
    Parameters: {"term"=>"boo"} 
Completed in 49ms 

Dưới đây là tuyến đường của tôi file:

resources :people do 
    collection do 
     get :search 
    end 
    end 

Tôi có một people_controller.rb với một phương pháp tìm kiếm được xác định.

+0

Tôi đang chạy trên đường ray cạnh bây giờ, nhưng tôi cũng đã thử trên phiên bản beta ... – midas06

0

Tôi cũng gặp sự cố tương tự. Theo ví dụ của bạn routes.rb của tôi trông như thế này

resources :people 

... 

resources :people do 
    collection do 
     get :search 
    end 
    end 

thay đổi nó để:

resources :people do 
    collection do 
     get :search 
    end 
    end 

... 

resources :people 

và tôi có thể truy cập vào bộ sưu tập ... btw, đây là cách thích hợp của việc thêm các tuyến đường? tức là có phong cách tốt để chỉ thêm một tuyến đường mới khi thêm hành động vào bộ điều khiển và để nguyên tài nguyên "cũ": những người như vậy không?

+0

Tôi biết điều này là cũ, nhưng về cơ bản bạn chỉ thêm bản sao lần thứ hai. – bradlis7

Các vấn đề liên quan