#メソッドとは何か?
メソッド【method】の意味を調べてみると、「目的を達成するために決められたやり方。方法。方式」「オブジェクト指向プログラミングにおいて、オブジェクトに対する操作を定義した手続き」とあります。
#メソッドを定義する方法
メソッドを定義するには、実行する処理内容をdef ~ end 内に記述します。
基本の書き方は以下のようになります。
def メソッド名(引数) # 引数は任意
# 実行する処理内容
end
#2種類(引数・戻り値)を使うとは?
**「引数」**とは、関数に何らかの処理をする際に渡す値のことを指します。
**「戻り値(返り値)」**は、メソッドが呼ばれたときに返ってくる値のことです。def ~ end 処理内の最終結果が戻り値になります。
#メソッドの実例
def communication(name)
"Hello, #{name}" # 戻り値
end
puts communication('Taro') # 'Taro'を引数として渡す
【意味】communicationというメソッドで、nameという引数を受け取る。そして "Hello, #{name}!"にnameという引数を渡して、表示することができる。
【詳細】
①引数を作成:puts communication('Taro')
②メソッドを設定:def communication(name)~ end
③引数('Taro') ⇒(name)へ入る
④メソッドで定義された動作を行う戻り値を設定:"Hello, #{name}"
流れ:('Taro') ⇒(name)⇒"Hello, #{name}" ⇒Hello,Taro
#投稿フォームなどを使用する場合
def create
@book = Book.new(book_params)
@book.save
redirect_to book_path(@book)
end
private
# ストロングパラメータ
def book_params
params.require(:book).permit(:title, :body)
end
【各部説明】
privateストロングパラメータとは
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように制限するもの。※今回permit(:title, :body)に絞った。
ストロングパラメーターを使用する理由は、受け取るパラメーターを制限しなければ、仕様以外のパラメーターも使われてしまうため。この状態だと、意図しないデータの更新をされる可能性が発生しまう。
たとえば、他人のログインパスワードを変更するパラメーターを追加で送信すれば、勝手にパスワードを変更できてしまう。これを回避するために、ストロングパラメーターを使用し、パラメーターを制限する必要がある。
この仕組みがprivateの行から下のコード。
book_paramsの定義
book_paramsではフォームで入力されたデータを受け取っている。
paramsはRailsで送られてきた値を受け取るためのメソッドです。
requireでデータのオブジェクト名(ここでは:book)を指定し、permitでキー(:title,:body)を指定。
これにより、book_paramsの中にフォームで入力されたデータが格納される。
require(:モデル名)の意味
登録するのはどのテーブルなのか?ということを指定するために必要です。今回は、require(:book)となるのでbookのテーブルへ登録したい!ということです。
【流れ】
①ストロングパラメータで入力する内容と保存先を設定する
②createアクションでストロングパラメータ(入力フォームや保存先を設定したもの)を引数として入れる。
def create
@book = Book.new(book_params)
⇒book_paramsを使うと入力内容・保存先を設定・指定することができる。
③遷移先で入力した人のshowページへ移動する場合
@book = Book.new(book_params)
@book.save
redirect_to book_path(@book)
⇒@bookの変数で@book =Book.new(book_params)と新規で入力した方を設定。
遷移先redirect_to book_path(@book)の
@bookは**Book.new(book_params)**を示す。そのため投稿者のページへ遷移することができる。
#ストロングパラメータではprivate・protected2種類の設定がある
privateは、自分のコントローラ内でしか参照できません。
private
def book_params
params.require(:book).permit(:title, :body)
end
protectedは呼び出された他のコントローラからも参照できます。
⇒主に、application_controller.rbで使用することが多い。
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
#まとめ
引数や戻り値を設定することで、値を代入し効率的に表示をできる。