2010-11-18 20 views
6

Tôi không thể tìm ra cách thực hiện điều này trong đường ray 3.0. Tôi có một bộ điều khiển, products, và một hành động, search, và trong routes.rb Tôi đã thửĐịnh cấu hình các tuyến không yên tĩnh

resources :products, :collection => {:search => :post } 

match 'products/search' => 'products#search', :via => [:get, :post] 

và nhiều cài đặt khác, nhưng bất cứ khi nào tôi truy cập products/search tôi vẫn nhận được một lỗi phàn nàn rằng Sản phẩm có id, search, không thể tìm thấy cho hành động show. Có ai biết tôi đang làm gì sai không?

Cảm ơn.

Trả lời

10

Bạn thân thiết.

resources :products do 
    collection do 
    match 'search', :via => [:get, :post] 
    end 
end 

Ngoài ra, bạn cũng có thể làm:

resources :products do 
    match 'search', :on => :collection, :via => [:get, :post] 
end 

Xem Rails Routing from the Outside In cuốn Hướng dẫn Edge cho biết thêm chi tiết, cụ thể hơn:

+1

Ồ, tôi không biết làm cách nào tôi bỏ qua phần "định tuyến từ bên ngoài trong". Tuyệt vời. Cảm ơn, các bạn, đã làm việc đó. – user508546

+0

Không có prob. Vui vì chúng tôi có thể giúp đỡ. =) Quá tệ, bạn không thể đánh dấu cả hai câu trả lời của chúng tôi. = D – John

4

Trong Rails 3, collection bây giờ là một khối:

resources :products do 
    collection do 
    get :search 
    post :search 
    end 
end 

này sẽ cho phép bạn truy cập vào ProductsController#search hành động bằng cách sử dụng một yêu cầu GET hoặc POST.

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