Rails:从查询字符串参数中区分路径参数的最简单方法?

时间:2013-12-27 11:19:03

标签: ruby-on-rails rails-routing

Rails路由器为我们提供了一种定义可选路径参数的简便方法like this

# config/routes.rb
scope "(:locale)", locale: /ru|de|fr/ do
  resources :books
end

因此,我们可以访问/users路径并获取默认语言区域,或/ru/books并获取params[:locale]中的区域设置。

但是使用相同的设置我们也可以调用页面/books?locale=ru并获得相同的效果(路径参数和查询字符串参数被平等对待并放入params哈希)。如果在全局before_action中处理区域设置Rails i18n guide建议我们甚至可以为不应本地化的页面设置区域设置。

所以我的问题是,从查询字符串参数中获取路径参数的最简单和最简洁的方法是什么(目标是忽略某些查询字符串参数)?

1 个答案:

答案 0 :(得分:2)

回答我自己的问题:

有一种方法ActionDispatch::Request#query_parameters。它仅返回通过查询字符串设置的参数。

还有方法path_parameterssymbolized_path_parameters。很明显,它们返回从路径派生的参数(包括controlleraction)。可以在控制器操作内的request上调用它们。 (它们没有在ActionDispatch::Request下记录,这就是我最初错过它们的原因。)

Rails 5 (编辑2017年1月9日):从Rails 5开始,方法symbolized_path_parameters被删除了。方法path_parameters现已记录在案。