【发布时间】:2015-04-22 07:47:22
【问题描述】:
我正在尝试在我现有应用的网址中实现一个可选“区域”参数:
现有: /博客
新: /se/博客 要么 /zh/博客
这条路线应该是可选的(它只会用作过滤器,没有区域意味着全球),并且参数值应该是'ww'(全球)或nil(或其他,只要我知道没有提供)。
我想出的路线是这样的:
scope "(:region)", region: /en|se|dk|no|ww/, defaults: {region: 'ww'}
我在 ApplicationController 中使用 default_url_options 将 :region 参数设置为与 param[:region] 相同,以便在存在时将其保留并应添加到页面上的所有 url。
def default_url_options(options={})
{ region: params[:region] }
end
问题是,当我使用 url /se/blogs 时,参数被正确设置为“se”,但它不会自动添加到页面上的任何 url。如果我删除范围路由的默认选项,它会起作用并预先添加参数“se”,但是由于没有默认值,许多 url 失败并显示“ActionController::UrlGenerationError: No route matches”,因为在 url helper 中,对象由于没有默认值,因此正在取区域值。
关于如何解决这个问题的任何想法?它可能与这个(仍未解决的)问题有关吗? https://github.com/rails/rails/issues/12178
【问题讨论】:
标签: ruby-on-rails routes scope