質問: Article.where(article_params) def article_params params.fetch(:article, {}).permit(:category_id, :created_at) end ``` 上記の様なコードを書いていますが、以下の様なエラーが出てしまいます。 ``` ``` 恐らく Range の扱いが特殊なためだと思われるのですが、 Strong Parameters で Range を使用するには、どうすればよろしいでしょうか。
回答: `actionpack-4.2.0/lib/action_controller/metal/strong_parameters.rb`だと515行目あたりに`PERMITTED_SCALAR_TYPES`という許可するクラスの一覧があって`Range`がそこには含まれていないので`Range`を渡すとフィルタで消されてしまってますね。 ところで、Strong paramatersは元々Mass assignment脆弱性対策のために導入されたものです。これを * コントローラが受け入れるべきパラメータの検証 * コントローラがモデルに渡す際のパラメータの検証 のどちらと解釈するかですが、ニュアンスとしては前者ではないかなと思います。とすると、値を書き換えるのであればまず先に検証してから編集した方が良いのではないですかね。 ``` search_params = article_params search_date = Time.parse(params[:article][:created_at]) search_params[:created_at] = search_date..search_date.end_of_day @articles = Article.where(search_params) ```