Open Fumiya-Matsumoto opened 2 years ago
追加であった方がいいカラム
ベストタイムなので、同ユーザー、同distanceの重複はなし。ただし、公認、非公認は別に出せるようにする。
best_timesテーブルにuser_id, distance, officialの3つの組み合わせでユニーク制約のバリデーションを行うには、以下のようにする。
# app/models/best_time.rb
class BestTime < ApplicationRecord
belongs_to :user
validates :user_id, uniquness: { scope: [:distance, :official]}
end
scope
は範囲を指定して、一意かどうかをチェックしてくれる。これで、user_id, distance, officialが全て一致したデータは1件しか作れなくなる。
# db/migrate/20220619053800_add_unique_to_best_times.rb
class AddUniqueToBestTimes < ActiveRecord::Migration[6.1]
def change
add_index :best_times, [:user_id, :distance, :official], :unique=>true
end
end
メソッド名 | エンドポイント | アクション |
---|---|---|
GET | /v1/best_times(.:format) | v1/best_times#index |
POST | /v1/best_times(.:format) | v1/best_times#create |
GET | /v1/best_times/:id(.:format) | v1/best_times#show |
PATCH | /v1/best_times/:id(.:format) | v1/best_times#update |
PUT | /v1/best_times/:id(.:format) | v1/best_times#update |
DELETE | /v1/best_times/:id(.:format) | v1/best_times#destroy |
テストしたところ、user_id, distance, officialが全て一致したデータを重複して入れれなくなったが、レスポンスのステータスコードが422と想定外のものになっている。
概要
BestTimeモデルのAPIを設計する
目的
現状
なんだか無駄が多い気がする
改善版
こちらの方がスッキリしている