Tôi biết tôi m một chút muộn ở đây, nhưng câu hỏi này là một trong những hit hàng đầu khi googling "sử dụng url_helpers trong routes.rb", và tôi ban đầu tìm thấy nó khi tôi đã vấp phải vấn đề này, vì vậy tôi muốn chia sẻ giải pháp của tôi.
Như @martinjlowm được đề cập trong câu trả lời của mình, người ta không thể sử dụng người trợ giúp URL khi vẽ tuyến mới. Tuy nhiên, có là một cách để xác định quy tắc chuyển hướng tuyến đường bằng cách sử dụng trình trợ giúp URL. Có điều là, ActionDispatch::Routing::Redirection#redirect có thể mất một khối (hoặc một #call
-able), đó là sau (khi người dùng truy cập các tuyến đường) gọi với hai tham số, params và yêu cầu, để trở về một con đường mới, một chuỗi. Và bởi vì các tuyến đường được vẽ chính xác tại thời điểm đó, nó hoàn toàn hợp lệ để gọi những người trợ giúp URL bên trong khối!
get 'privacypolicy.php', to: redirect { |_params, _request|
Rails.application.routes.url_helpers.privacy_policy_path
}
Bên cạnh đó, chúng ta có thể sử dụng các cơ sở lập trình meta Ruby để thêm một ít đường:
class UrlHelpersRedirector
def self.method_missing(method, *args, **kwargs) # rubocop:disable Style/MethodMissing
new(method, args, kwargs)
end
def initialize(url_helper, args, kwargs)
@url_helper = url_helper
@args = args
@kwargs = kwargs
end
def call(_params, _request)
url_helpers.public_send(@url_helper, *@args, **@kwargs)
end
private
def url_helpers
Rails.application.routes.url_helpers
end
end
# ...
Rails.application.routes.draw do
get 'privacypolicy.php', to: redirect(UrlHelperRedirector.privacy_policy_path)
end
Đó là một ý tưởng tuyệt vời, thích nó, cảm ơn! –