Rails 4 - 使用has_many来验证唯一性

时间:2017-05-31 11:26:04

标签: ruby-on-rails ruby ruby-on-rails-4 activemodel

我有这三种模式:

用户:

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

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

1 个答案:

答案 0 :(得分:2)

你没有。

您应该在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 - 而不是电子邮件。