ruby-on-rails-3 - Rails3 : Prefix to all url_for URLS

标签 ruby-on-rails-3 scope url-routing

我将 i18n 添加到我的网页(不同语言的不同内容)。我的 URL 看起来像这样:

http://host.tld/de/news/15
http://host.tld/en/news/15
...

我在应用程序中的所有 URL 都是由 link_to/url_for 方法设置的,如下所示

url_for("/news/#{news.id}/#{urlify(news.title)}")
url_for("/news/#{@news.section}")
...

我的路线是这样的:

scope "/:language/", :language => /de|en/ do
  match "news/:news_id(/:title)" => "news#show_entry", :constraints => { :news_id => /[0-9]+/ }
  ...
end

我将其添加到我的 ApplicationController 中:

def default_url_options(options={})
  {:language => I18n.locale}
end

现在我想在不更改所有 url_for() 调用的情况下将语言前缀添加到所有 URL。是否有添加此前缀的解决方案(参数/配置选项或其他)?它也应该适用于相对路径。

最佳答案

如果您不想更改所有调用的 url,您可以在 application_helper.rb 文件中添加一个方法来覆盖现有的方法以添加到语言中

def url_for(options={})
  if options[:language]
    '/options[:language]' + super
  else
    super
  end
end

def link_tolink_to(*args, &block)
  options = args[1] || {}
  if options[:language]
    '/options[:language]' + super
  else
    super
  end
end

关于ruby-on-rails-3 - Rails3 : Prefix to all url_for URLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393795/

相关文章:

javascript - 在 Javascript 中通过变量作用域维护变量

javascript - 在 JavaScript 中收缩变量

ruby - 更改 ruby​​ 方法上下文/使用 instance_exec 调用方法

javascript - 具有任意字符的 AngularJS 路由参数

ruby-on-rails - ruby on rails 中的自定义 url

ruby-on-rails - Ruby on rails redirect_to 保存后不会重定向,只是停留在页面上(但确实保存)

ruby-on-rails - Haml - 非法嵌套 : nesting within plain text is illegal

ruby-on-rails - 如果使用提示,Rails datetime_select 无法设置默认日期

ruby-on-rails-3 - 从 Rails 日期时间对象中减去 N 分钟

asp.net-mvc - 路由约束到特定文件类型