Rails 4 - 通过 has_many 验证唯一性

Rails 4 - Validates uniqueness with has_many through

我有这三个模型:

用户:

class User < ActiveRecord::Base
  validates :name, presence: true
  validates :surname, presence: true
  validates :email, presence: true, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i }

  has_many :permissions, dependent: :destroy
  has_many :stores, through: :permissions
end

商店:

class Store < ActiveRecord::Base
  validates :name, presence: true
  validates :description, presence: true

  has_many :permissions
  has_many :users, through: :permissions
end

权限:

class Permission < ActiveRecord::Base
  belongs_to :user
  belongs_to :store
end

如何根据 store.id 验证 user.email 的唯一性?

你不知道。

您应该验证 User 中用户电子邮件的唯一性。并验证 user_idstore_idPermission.

中的唯一性
class User < ApplicationRecord
  # ...
  validates_uniqueness_of :email
end

class Permission < ApplicationRecord
  validates_uniqueness_of :user_id, scope: 'store_id'
end

这允许用户拥有多个商店的权限 - 但不允许重复。通常,将记录链接在一起时使用 id - 而不是电子邮件之类的东西。