私は、コントローラのアクションでサービスオブジェクトを使用するレールjson APIを作成しており、サービスで何が起こっているのかを判断するには、適切なjsonをレンダリングする必要があります。この例は次のようになります。ステータスを返すサービスオブジェクト
star_service.rb
class Place::StarService
def initialize(params, user)
@place_id = params[:place_id]
@user = user
end
def call
if UserStaredPlace.find_by(user: user, place_id: place_id)
return #star was already given
end
begin
ActiveRecord::Base.transaction do
Place.increment_counter(:stars, place_id)
UserStaredPlace.create(user: user, place_id: place_id)
end
rescue
return #didn't work
end
return #gave a star
end
private
attr_reader :place_id, :user
end
places_controller.rb
def star
foo_bar = Place::Star.new(params, current_user).call
if foo_bar == #sth
render json: {status: 200, message: "sth"}
elsif foo_bar == #sth
render json: {status: 200, message: "sth"}
else
render json: {status: 400, message: "sth"}
end
そして、私は、サービスオブジェクトからプレーンテキストを返すべきか、いくつかのより良い方法があるかどうか私の質問は、ありますか?
だから、私はサービスを削除し、ロジックを動かすべきであると言っていますコントローラに? –
申し訳ありませんが、私は少し答えを再考し、更新しました。いいえ、サービスを削除する必要はありません。サービスは人生です:)サービスは結果を返します。コントローラのアクション(プライベートメソッドを使用しているかもしれない)が 'false'でなければ結果をレンダリングする – VAD