Я в процессе миграции приложения Rails 3 в Rails 4. Для нашего приложения у нас есть два домена верхнего уровня, которые мы используем для нашего английского сайта и японского сайта. Для того, чтобы динамически ссылки на соответствующий сайт, мы расширяли url_for как следующиеВключение в url_for с Rails 4
module I18nWwwUrlFor
def url_for(options=nil)
if options.kind_of?(Hash) && !options[:only_path]
if %r{^/?www} =~ options[:controller]
options[:host] = i18n_host
end
end
super
end
end
OurApplication::Application.routes.extend I18nWwwUrlFor
Под Rails 4, это не работает. Это связано с тем, что именованные маршруты теперь непосредственно вызывают ActionDispatch :: Http :: URL.url_for, который принимает параметры и генерирует URL-адрес. В идеале я хотел бы расширить этот url_for, но для этого нет никаких крючков, поэтому я остаюсь с помощью исправления обезьян, используя alias_method_chain. Я что-то упускаю и есть лучший способ сделать это?
Хм, только помощники _path ссылаются на url_for. Мы используем _url, который больше не проходит через url_for. Итак, root_path будет работать, пока вы показываете, но root_url не будет. –
любая причина, по которой вы используете методы '_url'? – AJcodez
Поскольку вы обычно используете _url, когда хотите полный URL-адрес, тогда как _path - для относительного пути. –