Techioz Blog

スコープ付きの一意の検証には多くの関連性があります

概要

私のホテルには多くのユーザーがおり、ユーザーは多くのホテルに所属している可能性があります。スコープの検証、つまりホテルごとにユーザーのユーザー名と電子メールの一意性を検証したいと考えています。現在、私のモデルは次のようになります。

class User < ApplicationRecord
  has_many :hotel_users
  has_many :hotels, through: :hotel_users
end

そして私のホテルのモデル:

class Hotel < ApplicationRecord
  has_many :hotel_users
  has_many :users, through: :hotel_users
end

助言がありますか?

解決策

結合テーブルの明示的なモデルを作成し、そこでの一意性を検証する必要があります。

class HotelsUsers < ApplicationRecord

  belongs_to :hotel
  belongs_to :user

  validates_uniqueness_of :user_id, :scope => :hotel_id


end