これはCreateSubscriptionサービスクラスです。私はAPI呼び出しがあり、いくつかのデータ挿入が発生するので、このロジックを動作させます。 サービスでエラーオブジェクトを返すエラー処理
このクラスは基本的にコントローラから呼び出されており、そこでエラーを処理する必要があります。 しかし、私はuser.errosオブジェクトでfull_messagesの代わりにエラーをどのようにトリガできるので、エラーを反復してJSONでエラー応答を作成することができます。
:「{ "エラー" "UUIDは空白にすることはできません、名前を空白にすることはできず、電子メールは無効である" }
{
にエラー: "[ { " uuid ":[ "空白にすることはできません " ]"名前 ":["できません "] .. } ] }サービス/ create_subscription.rb
class CreateSubscription
class UserCreateError < StandardError; end
def self.call(plan, user_info:)
subscription = nil
ActiveRecord::Base.transaction do
user = CreateUser.call(user_info)
raise UserCreateError.new(user.errors.full_messages.to_sentence) unless user.valid?
サービス/ create_user.rb
class CreateUser
def self.call(payment_info)
uuid = payment_info[:uuid]
name = payment_info[:name]
email = payment_info[:email]
user = User.find_by(uuid: uuid)
return user if user.present?
user = User.create(
uuid: uuid,
name: name,
email: email
)
user
end
end
UPDATE
コントローラ/ subscriptions_controller.rb
def create
# Some logic ....
rescue CreateSubscription::UserCreateError => e
# TODO: This should be an array, not only each one
render json: { error: e.message }, status: :bad_request
これが作業を行います。
これは、このようなJSONをレンダリングする必要があります。ありがとう。しかし、なぜバックスラッシュ「エラー」を出力するのだろうか?「{:uuid => [空白にすることはできません\」] – Tosh
あなたの質問に追加できますか? – siegy22
JSON形式のエラーを出力します。 – Tosh