ruby-on-rails - 如何使用 link_to 以便将传递给 Controller ​​的所有参数保留在 Ruby on Rails 2 中?

标签 ruby-on-rails ruby-on-rails-2

我有一个双语网站,其中包含适合 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 参数丢失了。

  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' 和 'en', :greenhopper => false)...
  3. ...但它们应该是 /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/

相关文章:

ruby-on-rails - 自定义验证器以防止 Rails 4 应用程序中的重叠约会?

ruby-on-rails - 具有 PG::ConnectionBad "/var/run/postgresql/.s.PGSQL.5432"的 Rails、Postgres 和 Docker?

ruby-on-rails - 如何计算一个文件夹中 csv 文件的空范围?

ruby-on-rails - 使用 RSpec 测试 Controller 时如何调用 Rails 命名路由?

ruby-on-rails - rvmrc 文件不起作用

ruby-on-rails - 当我在搜索中有很多参数时,如何简化条件?

ruby-on-rails - 从Rails 2.3.8升级到4.0

ruby-on-rails - 从事件记录中删除括号和引号

ruby-on-rails - Webrat (web_steps.rb) 未被使用

ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样?