FriendShip
をemailまたはphone_numberで作成できるWeb APIを作成しようとしています。ここでRails Web APIがエラーをスローする
class Api::FriendshipsController < Api::BaseController
respond_to :json
def create
friend = User.where("email = ? OR phone_number = ?", params[:emailOrPhone], params[:emailOrPhone]).first # create a friend by email or phone_number
if friend.valid? # check if the friend exists, if it does we create our new friendship
friendship = Friendship.new
friendship.user = current_user
friendship.friend = friend
if friendship.valid? # check if friendship is valid
friendship.save # if it is, we save and return a success JSON response
render json: {created: true}, status: 200
else # if it's not a valid friendship, we display a error JSON response
render json: {created: false}, status: 400
end
end
end
end
は私FriendShip
モデルの一意性制約に違反するたびに
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User"
validates_uniqueness_of :user_id, scope: :friend_id, :message => '%{friend_id} is already a friend'
validate :check_friend_and_user # prevent user trying to add him/herself as friend.
def check_friend_and_user
errors.add(:friend, "can't be the same as user") if user == friend
end
end
、私はそれがエラーを投げる代わりに進まない作るにはどうすればよいのエラーコードとエラーmissing interpolation argument :friend_id in "%{friend_id} is already a friend" ({:model=>"Friendship", :attribute=>"User", :value=>2} given)
500
ですステータスコード付きの「失敗するJsonレスポンス」を返す400
このAPIの呼び出し側が、既に友人であるユーザーを追加しようとしていることを知りたいと思います。状態コード500
とhtmlの束を戻すことはそれを一意に識別していないようです。だから、私はJSONとステータスの形でエラーをスローしたいと思います。200