2

我有一个双语网站,有很好的 SEO 网址。使用 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' %>

我只是没有指定控制器和操作,因此我被重定向到具有不同语言环境的当前控制器和操作。不幸的是, :greenhopper 参数丢失了。

  1. 我在/order-jira-with-greenhopper-hosting/11.html
    ( :option => 11, :locale => 'en', :greenhopper => true)
  2. 用于切换语言的生成链接是/order-jira-hosting/11.html/zamow-hosting-jira/11.html
    (:option => 11, :locale => 'pl' and 'en', :greenhopper => false)...
  3. ...但他们应该是/order-jira-with-greenhopper-hosting/11.html并且/zamow-hosting-jira-z-greenhopper/11.html
    (:option => 11, :locale => 'pl' and 'en', :greenhopper => true)

如何使用 link_to 方法以保留传递给控制器​​的所有参数?谢谢你的帮助。

4

1 回答 1

3

您可以将发送到link_to的散列基于 params 散列,如果您将其link_to按原样传递,则会重新加载当前页面。您可以使用Hash.merge(other_hash)重置:locale每个链接的密钥:

<%= link_to '<polish image />', params.merge({:locale => 'pl'}), :class => 'a' %>

现在,params 确实包含控制器和操作键,但它们是生成当前页面的控制器和操作,因此链接的行为应该就像页面刷新一样,只有您通过params.merge更改更改的参数。

希望这可以帮助!

PS: params.merge不会更改 params 哈希,如果您对此感到担忧 - 合并的结果将作为新哈希返回。

于 2011-02-16T22:39:22.547 回答