Railsのアプリケーションにおいて、フォームからの入力がない場合にデフォルトの値を使用したいシチュエーションはよくあります。この記事では、staff
の編集フォームで特定の入力がない場合に、services
テーブルのfee
カラムに設定されている値をデフォルト値として使用する具体的な方法について説明します。
メソッドの定義場所
この機能を実装するにあたり、デフォルト値を提供するメソッドdefault_fee
をService
モデル内に定義します。これにより、特定のサービスに関連付けられたデフォルト料金を簡単に取得できるようになります。
default_fee
メソッドの定義
Service
モデルにdefault_fee
メソッドを定義することで、特定のサービスのデフォルト料金を取得できます。以下はその定義例です。
class Service < ApplicationRecord
# 既存のコード
# デフォルト料金を返すメソッド
def default_fee
self.fee
end
end
コントローラでの使用例
次に、Staffs::RegistrationsController
のupdate
アクション内で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
を使用するようにしてください。