下級エンジニアの綴

新しく発見したことを綴っていこうと思っています。夢はでっかく上級エンジニアになることです。

railsのparamsについて調べたのでメモ

今回はparamsのメソッドについてハマったので色々調べたメモです。

railsのバージョンは4.1.8でrubyのversionは2.1.5です(古いバージョンで辛い・・・

内容

作成した成果物を一覧で表示する処理を書いており、スクロールを行うと自動で次の成果物を表示するロジックを書いていた時に発生しました。

ロジックとしては、一定以上の座標に到達した時、非表示にしているlinkタグを動的に叩かせる処理で、linkタグはget形式です。

原因

getのパラメータの引数が膨大な長さになっており、それが原因でエラーになっていました。

処理の流れとしては

paramsを送信 (ブラウザ)→paramsを加工(サーバ)→linkタグを生成(ブラウザ)

みたいな流れです。

なぜ急に発生したのかと調べているとparamsを加工する処理が一番の原因でした。

サーバ側で〇〇_id_in[1,2,3.....]みたいな形のparamsを生成しており、

↑のparamsを元にgetのpathを生成すると

〇〇_id_in=1&〇〇_id_in=2&〇〇_id_in=3...のような形式でpathが生成されました。

色々調べたところ、pathを作る時にparamsを元にしているっぽかったです。(配列で渡されたら↑のような形式になるのかな?未検証ですみません)

対応

  • paramsを直接書き換えないようにする事(加工する時はdupなどで複製した物を使う)
  • ransakを使うときは〇〇_id_inみたいなparamsをブラウザで生成しない事

まとめ

railsのparamsは直接触らずにdupなどで複製し、その複製したものに変更を加え流のが良いですね。あとransackの〇〇_in怖い・・・

参考リンク

stackoverflow.com

params (ActionController::StrongParameters) - APIdock