1
0

Railsでデフォルト値をモデルから取得する方法

Posted at

Railsのアプリケーションにおいて、フォームからの入力がない場合にデフォルトの値を使用したいシチュエーションはよくあります。この記事では、staffの編集フォームで特定の入力がない場合に、servicesテーブルのfeeカラムに設定されている値をデフォルト値として使用する具体的な方法について説明します。

メソッドの定義場所

この機能を実装するにあたり、デフォルト値を提供するメソッドdefault_feeServiceモデル内に定義します。これにより、特定のサービスに関連付けられたデフォルト料金を簡単に取得できるようになります。

default_feeメソッドの定義

Serviceモデルにdefault_feeメソッドを定義することで、特定のサービスのデフォルト料金を取得できます。以下はその定義例です。

class Service < ApplicationRecord
  # 既存のコード
  
  # デフォルト料金を返すメソッド
  def default_fee
    self.fee
  end
end

コントローラでの使用例

次に、Staffs::RegistrationsControllerupdateアクション内でdefault_feeメソッドを使用する方法を示します。この例では、フォームからの入力がない場合に、Serviceモデルからデフォルト値を取得しています。

class Staffs::RegistrationsController < Devise::RegistrationsController
  def update
    # 既存の認証処理など
    
    params[:staff][:service_ids].each do |service_id|
      if params[:staff][:service_fees][service_id].blank?
        service = Service.find(service_id)
        
        # 値の入力がない場合はデフォルト値が設定される
        fee = params[:staff][:service_fees][service_id].presence || service.default_fee
        # その他の処理
      end
    end
    
    super
  end
end

留意事項

  • default_feeメソッドを使用する前に、Serviceモデルが正しく定義されていることを確認してください。
  • フォームからの入力がある場合は、その入力値を使用し、入力がない場合のみdefault_feeを使用するようにしてください。
1
0
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
1
0