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建议我们甚至可以为不应本地化的页面设置区域设置。
所以我的问题是,从查询字符串参数中获取路径参数的最简单和最简洁的方法是什么(目标是忽略某些查询字符串参数)?
答案 0 :(得分:2)
回答我自己的问题:
有一种方法ActionDispatch::Request#query_parameters
。它仅返回通过查询字符串设置的参数。
还有方法path_parameters
和symbolized_path_parameters
。很明显,它们返回从路径派生的参数(包括controller
和action
)。可以在控制器操作内的request
上调用它们。 (它们没有在ActionDispatch::Request
下记录,这就是我最初错过它们的原因。)
Rails 5 (编辑2017年1月9日):从Rails 5开始,方法symbolized_path_parameters
被删除了。方法path_parameters
现已记录在案。