在路由中使用范围来定义区域设置并尝试使用catch all

时间:2012-03-16 14:44:35

标签: ruby-on-rails-3 routes locale

我正在使用范围来定义区域设置,并且允许在没有区域设置的情况下调用我的路由,我遇到的问题是没有指定区域设置,路由会认为第一个路径项是什么现在现场。我想知道如何限制这一点,同时仍然不需要我的命名路由的语言环境?我这样做是为了迎合网站大修,我想抓住旧链接并将它们带到嵌套在新布局中的旧页面。

这就是我正在做的事情:

scope "(:locale)", :locale => /en|es/ do
    match 'named_route\:id'
end

我想知道有没有办法使用lamba来保证我有两个字符的语言环境,如果不绕过范围?我在想这可能是不可能的,因为我的路线可以在没有区域设置的情况下访问我必须检查它是否可能与下面的任何路线匹配,这不会太难。

我当时要问的是,是否可以使用lamba来检查区域设置中的一系列可能性?即“Locale在[en,es,events,pages等]中,然后输入范围。”这意味着如果它有一个语言环境,或者它可能存在于命名路由中,它将进入范围,否则它将避开范围,如果页面从不存在,我可以在显示404之前检查我的302表。 / p>

我希望这是有道理的。

修改 好的,现在我已经提出了一个有效的解决方案,但它不是很优雅。

由于我的应用程序控制器中有一个before_filter将locale设置为默认语言环境(如果它没有定义),我只是将我的根路由移动到范围的末尾,在我的root方法中我检查语言环境是否在其中一个本地人我提供if,将语言环境设置为我的默认语言环境并调用我的catch_all函数。

这就像我转到mysite / no_route_for_t这一样,它将我的语言环境设置为:no_route_for_this并调用我的根路径。

虽然更优雅的解决方案在这里是理想的。

0 个答案:

没有答案