Rails 路由器为我们提供了一种定义可选路径参数的简单方法,如下所示:
# config/routes.rb
scope "(:locale)", locale: /ru|de|fr/ do
resources :books
end
因此,我们可以访问/users
路径并获取默认语言环境,或者/ru/books
并获取 params[:locale]
中的语言环境。
但是使用相同的设置,我们也可以调用页面/books?locale=ru
并获得相同的效果(路径参数和查询字符串参数都同等对待并放入params
哈希中)。如果按照 Rails i18n 指南的建议在全局before_action
中处理语言环境,我们甚至可以为不应该本地化的页面设置语言环境。
所以我的问题是将路径参数与查询字符串参数区分开来的最简单和最干净的方法是什么(目标是忽略某些查询字符串参数)?
回答我自己的问题:
有一个方法ActionDispatch::Request#query_parameters
.它仅返回通过查询字符串设置的参数。
还有方法path_parameters
和symbolized_path_parameters
。很明显,它们返回从路径派生的参数(包括 controller
和 action
)。它们可以在控制器操作中request
调用。 (它们没有记录在ActionDispatch::Request
下,这就是我最初错过它们的原因。
(2017年1月9日编辑):从Rails 5开始,方法symbolized_path_parameters
已被删除。现在记录了方法 path_parameters
。