我有一个双语网站,其中包含适合 SEO 的良好 URL。使用 Ruby on Rails 2.3.10。
routes.rb
片段:
map.connect 'order-jira-hosting/:option.html',
:controller => 'order', :action => 'index', :locale => 'en'
map.connect 'order-jira-with-greenhopper-hosting/:option.html',
:controller => 'order', :action => 'index', :locale => 'en', :greenhopper => true
map.connect 'zamow-hosting-jira/:option.html',
:controller => 'order', :action => 'index', :locale => 'pl'
map.connect 'zamow-hosting-jira-z-greenhopper/:option.html',
:controller => 'order', :action => 'index', :locale => 'pl', :greenhopper => true
如您所见,:locale
和 :greenhopper
“隐藏”在 URL 中。
有一个开关,您可以更改当前页面的语言。请参阅我的views/layouts/default.erb
:
<%= link_to image_tag('icons/polish.png', :alt => 'polski'), { :locale => 'pl'}, :class => 'a' %>
<%= link_to image_tag('icons/english.png', :alt => 'English'), { :locale => 'en'}, :class => 'a' %>
我只是不指定 Controller 和操作,以便我被重定向到具有不同区域设置的当前 Controller 和操作。不幸的是,:greenhopper 参数丢失了。
- 我位于
/order-jira-with-greenhopper-hosting/11.html
(:option => 11, :locale => 'en', :greenhopper => true
) - 生成的用于切换语言的链接为
/order-jira-hosting/11.html
和/zamow-hosting-jira/11.html
(:option => 11, :locale => 'pl' 和 'en', :greenhopper => false)
... - ...但它们应该是
/order-jira-with-greenhopper-hosting/11.html
和/zamow-hosting-jira-z-greenhopper/11.html
(:option => 11, :locale => 'pl' 和 'en', :greenhopper => true)
如何使用 link_to 方法来保留传递给 Controller 的所有参数?感谢您的帮助。
最佳答案
您可以将发送到 link_to
的哈希值基于 params 哈希值,如果您按原样将其传递到 link_to
中,则会重新加载当前页面。您可以使用 Hash.merge(other_hash)
重置每个链接的 :locale
键:
<%= link_to '<polish image />', params.merge({:locale => 'pl'}), :class => 'a' %>
现在,params
确实包含 Controller 和操作键,但它们是生成当前页面的 Controller 和操作,因此链接的行为应该就像页面一样刷新,仅更改您通过 params.merge 更改的参数。
希望这有帮助!
PS:params.merge
不会更改 params 哈希,如果您担心这一点 - 合并的结果将作为新哈希返回。
关于ruby-on-rails - 如何使用 link_to 以便将传递给 Controller 的所有参数保留在 Ruby on Rails 2 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022784/