Posted at

pry-railsのbinding.pryでパラメーターを確認し、params.permitが何をしているのか視覚的に理解する

More than 3 years have passed since last update.

最近binding.pryのすごさに感銘を受けたので共有します。今回はサーバーに送られてくるリクエストに含まれるパラメーターの中身を見てみて一緒に感動しましょう。

今回はツイートの投稿の際にbinding.pryでパラメーターの確認をします。


binding.pryを記述する


tweets_controller.rb

class TweetsController < ApplicationController

def index
@tweets = Tweet.all
end

def new
end

def create
Tweet.create(tweet_params)
binding.pry
end

private
def tweet_params
params.permit(:name, :text, :image)
end
end


上記のようにcreateメソッド(投稿機能)内でbinding.pryを記述することで投稿ボタンを押した際に送られてくるパラメーターを見ることができます。


投稿ボタンを押す

「SENT」をクリックすると、サーバーにリクエストとフォーム内の情報が送られます。今回フォーム内において、nameカラムとimageカラム、textカラムが投稿されます。

投稿画面.png


binding.pryで処理が止まっていることを確認する

createメソッド(SENTボタン)を実行するとローカルサーバーを起動しているターミナル内でbinding.pryで止まっていることが確認できます。

binding_pry.png


パラメーターを見てみる


ターミナル

pry(#<TweetsController>)> params


paramsと入力し、実行すると

params.png

このようにサーバーに送られてくる情報がハッシュ型で送られてきていることが確認できます。

さらに、paramsはハッシュ型なので、この中の特定のキーに対応するバリューを取り出したい場合、ハッシュ型変数名[:キー]とすると


ターミナル

pry(#<TweetsController>)> params[:controller]


params_value.png

このようにバリューが取得できます。


params.permitがしていること

これもbinding.pryを使えば視覚的に確認することができます。


ターミナル

# 今回データベースにnameカラムとimageカラム、textカラムのみを保存します

pry(#<TweetsController>)> params.permit(:name, :image, :text)

今回データベースにnameカラムとimageカラム、textカラムのみを保存したいので、permitメソッドの引数にはこの3つのキーを指定することでそのキーとバリューをセットのハッシュ型で取得できます。こうすることで、上でも見た通り、たくさん送られてくる情報の中から、必要な情報のみを取得することができます。

また、この処理をprivate下に記述することで、セキュリティー面でも安心です。