gpt4 book ai didi

ruby-on-rails - Rails 链接到当前页面并向其传递参数

转载 作者:行者123 更新时间:2023-12-03 06:11:47 24 4
gpt4 key购买 nike

我通过使用 url 参数传递区域设置来将 I18N 添加到我的 Rails 应用程序中。我的网址看起来像 http://example.com/en/usershttp://example.com/ar/users (分别适用于英语和阿拉伯语区域设置)。

在我的路由文件中,我使用 :path_prefix 选项定义了我的路由:

map.resources :users, :path_prefix => '/:locale'

并且区域设置是使用 ApplicationController 中定义的 before_filter 设置的

def set_locale
I18n.locale = params[:locale]
end

我还定义了 ApplicationController#default_url_options,以将区域设置添加到应用程序生成的所有 URL:

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

我想要的是在布局标题(显示在所有页面中)中添加一个链接,该链接将链接到同一页面但具有其他区域设置。

例如,如果我正在浏览阿拉伯语区域设置,我希望在标题中添加一个“英语”链接,该链接会将我重定向回当前页面,并将区域设置设置为英语。有没有办法在 Rails 中做到这一点?

最佳答案

我花了一段时间才找到这个,但这是我的解决方案:

link_to 'English', url_for( :locale => 'en' )
link_to 'Deutch', url_for( :locale => 'de' )

来自此处的文档:http://api.rubyonrails.org/classes/ActionController/Base.html#M000649

When generating a new URL, missing values may be filled in from the current request‘s parameters. For example, url_for :action => ‘some_action‘ will retain the current controller, as expected. This behavior extends to other parameters, including :controller, :id, and any other parameters that are placed into a Route‘s path.

因此,使用 url_for 将默认使用当前请求的参数,只需在代码中更改您想要的参数即可。在本例中,我更改的只是 :locale,所以其他一切都保持不变。

请注意,这也适用于“隐藏”参数。所以如果你有:

map.my_map ':locale/my_map', :controller => 'home', :action => 'my_map'

在页面/en/my_map 中使用上述 url_for 将不会在 url 中包含“home”(即/en/home/my_map)。奖金。

关于ruby-on-rails - Rails 链接到当前页面并向其传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com