8

Trong RoR 3, tôi chỉ muốn có một liên kết/nút kích hoạt một số hành động/phương pháp trong bộ điều khiển. Cụ thể, nếu tôi nhấp vào liên kết 'update_specs' trên một trang, nó sẽ đi đến phương thức 'update_specs' trong bộ điều khiển sản phẩm của tôi. Tôi đã tìm thấy gợi ý để làm điều này trên trang web này:Đường dẫn hoặc nút Rails 3 thực thi tác vụ trong bộ điều khiển

link_to "Update Specs", :controller => :products, :action => :update_specs 

Tuy nhiên, tôi nhận được lỗi định tuyến sau khi tôi bấm vào liên kết này:

Routing Lỗi Không đường trận {: action => "update_specs", : controller => "sản phẩm"}

tôi đã đọc trên tuyến nhưng tôi không hiểu tại sao tôi cần phải tuyến đường phương pháp này nếu tất cả các phương pháp khác có thể truy cập thông qua các nguồn lực: sản phẩm .

+0

Bạn cần định tuyến phương thức này, vì hành động của bạn không thể truy cập thông qua các tuyến REST chuẩn được tạo bằng trình tạo 'tài nguyên'. – MBO

Trả lời

14

Bạn cần tạo tuyến đường cho nó.

Ví dụ:

resources :products do 
    put :update_specs, :on => :collection 
end 

Cũng theo mặc định link_to sẽ tìm kiếm một phương pháp GET trong tuyến đường của bạn. Nếu bạn muốn xử lý một phương pháp POST hoặc PUT bạn cần phải xác định nó bằng cách thêm {:method => :post } hoặc {:method => :put } như một tham số, như:

link_to "Update Specs", {:controller => :products, :action => :update_specs}, {:method => :put } 

Hoặc bạn có thể sử dụng button_to thay vì link_to đó xử lý các phương pháp POST theo mặc định.

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