11

Tôi có một số NotificationsController, trong đó tôi chỉ có hành động clear.Định tuyến đường ray: tài nguyên chỉ có các hành động tùy chỉnh

tôi muốn truy cập hành động này bằng cách thực hiện POST/thông báo/rõ ràng

Vì vậy, tôi viết điều này trong router của tôi:

resources :notifications, :only => [] do 
    collection do 
     post :clear 
    end 
    end 

Có cách nào sạch hơn để đạt được điều này? Tôi nghĩ

scope :notifications do 
    post :clear 
    end 

sẽ làm điều đó, nhưng tôi có một lỗi missing controller, bởi vì - tôi nghĩ - có vẻ cho bộ điều khiển clear.

Cảm ơn

Trả lời

15

Nếu bạn đang sử dụng phạm vi, bạn nên thêm một bộ điều khiển trông giống như

scope :notifications, :controller => 'notifications' do 
    post 'clear' 
end 

Hoặc chỉ cần sử dụng namespace

namespace :notifications do 
    post 'clear' 
end 
+0

Và nếu tôi cần cả một bộ sưu tập và một thành viên làm trong đó? Tôi vẫn cần xác định 'post' /: id/edit' theo cách thủ công? –

+0

Trong trường hợp của bạn và phạm vi sử dụng hoặc không gian tên, có ('get: edit,: path => '/: id/edit''). Nếu bạn không cần bằng tay bạn có thể sử dụng của bạn đã viết trên câu hỏi của bạn. Đọc ở đây http://stackoverflow.com/q/17465335/1297435 –

+3

Vâng, tôi cảm thấy như ': only => []' là giải pháp rõ ràng và ít hacky nhất. Cảm ơn –

1
post "notifications/clear" => "notifications#clear" 
+1

Vui lòng xem xét giải thích tại sao câu trả lời của bạn là đúng và điều đó có nghĩa là gì. – DonBoitnott

+0

Tôi muốn nhóm tất cả các hành động thông báo và có một 'phương thức: action' trong đó, như tài nguyên, nhưng không có các hành động mặc định mà tôi không sử dụng. –