RubyのPermitメソッドを使いこなすための7つのステップ – Japanシーモア

RubyのPermitメソッドを使いこなすための7つのステップ

RubyのPermitメソッドを解説する画像Ruby
この記事は約7分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

皆さんこんにちは。

今回の記事では、プログラミング言語RubyにおけるPermitメソッドの使い方を7つのステップで紹介します。

この記事を通して、Permitメソッドを理解し、活用できるようになります。

初心者の方でも、一歩ずつ進めていけば必ず理解できると信じています。

●Rubyとは

Rubyは、日本人のまつもとゆきひろ氏によって開発されたプログラミング言語です。

その人間中心の設計思想や柔軟性の高さから多くの開発者に愛され、特にWebアプリケーションの開発でよく使われます。

Ruby on Railsというフレームワークを使えば、効率的に高機能なWebアプリケーションを開発することができます。

●Permitメソッドの基本

○Permitメソッドとは

Permitメソッドは、Ruby on Railsで主に使われます。

具体的には、ユーザから送られてきたパラメータ(データ)の中から、安全に使用できるものだけを選択するためのメソッドです。

これにより、意図しないデータの操作を防ぐことができます。

○Permitメソッドの役割

Permitメソッドは、Webアプリケーションの安全性を保つために重要な役割を果たします。

不適切なパラメータがデータベースに保存されることを防ぐことで、情報の改ざんや削除を防ぎます。

●Permitメソッドの詳細な使い方

○サンプルコード1:基本的なPermitメソッドの使用例

Permitメソッドの基本的な使用例を見ていきましょう。

def create
  @user = User.new(user_params)
  @user.save
end

private

def user_params
  params.require(:user).permit(:name, :email)
end

上記のコードでは、新規ユーザーを作成する際に、:name:emailというパラメータだけを受け取るように指定しています。

これにより、他のパラメータ(例えば:admin:password)が送られてきても無視することができます。

○サンプルコード2:配列を引数に取るPermitメソッドの使用例

次に、配列を引数に取るPermitメソッドの使用例を見ていきましょう。

def create
  @user = User.new(user_params)
  @user.save
end

private

def user_params
  params.require(:user).permit(:name, :email, hobbies: [])
end

このコードでは、:hobbiesという配列型のパラメータも受け取るように指定しています。

このようにPermitメソッドでは、配列を安全に扱うことも可能です。

○サンプルコード3:ネストされたパラメータを扱うPermitメソッドの使用例

最後に、ネストされたパラメータを扱うPermitメソッドの使用例を見てみましょう。

def create
  @user = User.new(user_params)
  @user.save
end

private

def user_params
  params.require(:user).permit(:name, :email, address: [:prefecture, :city, :street])
end

このコードでは、:addressというネストされたパラメータ(:prefecture:city:street)も受け取るように指定しています。

これにより、一つのパラメータが複数の部分から成る場合でも、適切にデータを取り扱うことができます。

●Permitメソッドの注意点と対処法

Permitメソッドを使う上で、特に意識していただきたい点が2つあります。

一つ目は、必要なパラメータを全てpermit内に列挙しなければならないという点です。

省略してしまうと、そのパラメータは無視されてしまうため、予期しない動作の原因になります。

二つ目は、permitではなくrequireを使用した場合、そのパラメータが存在しない場合にエラーが発生するという点です。

この問題は、permitとrequireを適切に使い分けることで回避できます。

●Permitメソッドの応用例

○サンプルコード4:複数のモデルに適用するPermitメソッドの使用例

さて、次にPermitメソッドが複数のモデルに適用される例を見ていきましょう。

def create
  @user = User.new(user_params)
  @user.build_profile(profile_params)
  @user.save
end

private

def user_params
  params.require(:user).permit(:name, :email)
end

def profile_params
  params.require(:profile).permit(:age, :gender)
end

上記のコードでは、ユーザー作成と同時にそのユーザーのプロフィールも作成しています。

それぞれのモデルに対して、適切なパラメータを設定しています。

○サンプルコード5:条件付きパラメータを扱うPermitメソッドの使用例

また、条件によってパラメータを変更するケースもあります。

その例を見てみましょう。

def create
  @user = User.new(user_params)
  @user.save
end

private

def user_params
  if current_user.admin?
    params.require(:user).permit(:name, :email, :admin)
  else
    params.require(:user).permit(:name, :email)
  end
end

このコードでは、現在のユーザーが管理者の場合、:adminパラメータも許可しています。

これにより、特定のユーザーだけが特定のパラメータを操作できるように制限することができます。

●Permitメソッドのカスタマイズ方法

○サンプルコード6:カスタムバリデータを使用したPermitメソッドのカスタマイズ例

Permitメソッドはカスタマイズも可能です。

バリデーションをカスタマイズする例を見てみましょう。

def create
  @user = User.new(user_params)
  @user.save


end

private

def user_params
  params.require(:user).permit(:name, :email).tap do |permitted|
    permitted[:name] = filter_name(permitted[:name]) if permitted[:name].present?
  end
end

def filter_name(name)
  # 名前のカスタムバリデーション
end

このコードでは、:nameパラメータに対してカスタムバリデーション(filter_nameメソッド)を適用しています。

このようにPermitメソッドを活用すれば、柔軟なパラメータ制御が可能となります。

まとめ

以上、RubyのPermitメソッドを使いこなすためのポイントを詳しく説明してきました。

パラメータの指定方法や注意点、さらには応用例やカスタマイズ方法までを網羅しました。

これらの知識を身につけることで、Permitメソッドの振る舞いを理解し、あなた自身のコードに適切に適用することができるようになるでしょう。

なお、PermitメソッドはRailsのStrong Parametersと密接に関連しています。

本記事の内容とあわせて、Strong Parametersについても理解を深めていただけると、より一層コードの品質が向上するでしょう。

この記事を読んだあなたが、RubyのPermitメソッドを自在に操ることができるプログラマーになることを心から願っています。