【问题标题】:Default params in urls when using scopes with Ruby on Rails 3将范围与 Ruby on Rails 3 一起使用时,url 中的默认参数
【发布时间】:2012-11-15 11:07:54
【问题描述】:

我知道这已经被问过了,但我仍然无法让它工作。 我正在尝试使用default_url_options 来显示:locale 参数,如下所示:

# SomethingController < ApplicationController
def default_url_options(options={})
  { :locale => I18n.locale }
end

I18n.locale 设置为 before_filter 并具有正确的值(使用 pry 进行调试)。 路线:

# In routes
scope "(:locale)", :defaults => { :locale => I18n.default_locale } do
  get "something" => "something#index", :as => :something_index
end

在我看来我试过了:

url_for :something_index

something_index_url

但它们都返回“/something”而不是“/en/something”。为了自动显示要显示的参数,我还需要做些什么吗?

我读到了这个here

每个依赖于 url_for 的辅助方法(例如,命名的辅助方法) root_path 或 root_url 之类的路由,books_path 之类的资源路由或 books_url 等)现在将自动在 查询字符串

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    您可以修改 get 匹配器:

    scope :locale, :defaults => { :locale => I18n.default_locale } do
      get "/:locale/something" => "something#index", :as => :something_index
    end
    

    更好的方法,参考这里:

    Rails optional /:locale route

    【讨论】:

    • 刚刚更新了答案,这是因为您使用的是"(:locale)" 而不是:locale
    • 你说得对,现在显示了一个语言环境,但它始终是默认语言环境。 (:defaults =&gt; { :locale =&gt; I18n.default_locale })
    • 传入链接时需要设置locale。 'something_index_path(语言环境:'fr')'。我在这里要做的是将链接包装在我自己的助手中。我现在会更新我的答案。
    • 更新了我的答案,参考了一个对您有帮助的类似问题。
    • 我不确定我要做什么,我已经用 Rails 指南的链接更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2014-01-22
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多