Вы можете просто обернуть все свои вызовы
def path_name_for(path_name,*args)
path = "#{path_name}_path"
path.prepend("moscow_") if params[:city] == 2
public_send(path,*args)
end
Тогда в ваших представлениях просто позвоните
<%= link_to 'Business Path', path_name_for(:business, @business) %>
Это делает маршрутизацию немного более понятной для меня, так как делает ее немногоболее очевидно, что существует пользовательская реализация, а не переопределяющая известную реализацию.
Также это тоже может быть возможностью (хотя и не проверено, это должно работать как ваш существующий код в "path_helper.rb")
module PathHelper
module MoscowRedirect
def self.prepended(base)
%i[...].each do |path_name|
define_method("#{path_name}_path") do |*args|
params[:city] == 2 ? public_send("moscow_#{__method__}",*args) : super(*args)
end
end
end
end
self.prepend(MoscowRedirect)
end