手が震えたらBARに行こう

駄文を吐き出して、今日もなんとか、元気に生きていこうと思います。twitterアカウントは、@tabunmuri255です。よろしくです。

railsでjsonに、permitで要素チェックしたい時の方法

とりあえず、声を大にして言いたいのは
railsのscaffoldは案外、知見がいっぱいあるよ
(特に、初心者の方にとっては。)

ということで、最近、jmeterの使い方から、負荷計測の方法のさわりをお伝えすべく、いろいろ準備していたりします。

さて、今日はRailsのPermitメソッドについて改めて記録しておきたいと思います。
Railsでは、permitっていう要素をチェックする仕組みがあるのですが、これはぜひ有効活用していったほうが良さそうです。
(ちなみに、node.jsだと、json_schemeってので、対応しておりました。)

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :email, :password)
end

こういうやつね。
scaffoldすると、全自動でブッこんでくれてるみたいなんですけれども、この仕組超便利っぽいですね。
なぜなら、この1行で、

1, paramsの中には、userというattributeがあって、
2, 更にその中で許可しているのは、name, email, passwordという要素のみ

ということをチェックしてくれているからです。

うーん、この仕組み、可能であれば、jsonのやりとりしてる時でも使いたいな。。。
ただ、jsonのparamsの中に入ってる状態って、パースされてなくて、使えないんだよね。
そんな時はこんなかんじにするといいよっていうのを調べました。

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  # 下記のようにすることで、paramsで実行していたpermitと同様のことができる
  json_request = ActionController::Parameters.new(JSON.parse(request.body.read))
  json_request.permit(:name, :email, :password)
end

まぁ、なんといっても、大切なのは下記の1行

  json_request = ActionController::Parameters.new(JSON.parse(request.body.read))

ActionControllerとしてnewするとpermitが使えるらしい。
これで、更新してほしくないパラメータのロックとかができるようになります。
自前で、チェックをかけようとしてるのであれば、検討してみると良いかもしれません。

参考文献

stackoverflow.com