0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails メソッドを定義する(引数・戻り値・ストロングパラメーター の設定方法)

Last updated at Posted at 2021-05-18

#メソッドとは何か?
 メソッド【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

#投稿フォームなどを使用する場合

〇〇_controller.rb
  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

#まとめ
引数や戻り値を設定することで、値を代入し効率的に表示をできる。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?