我有这三种模式:
用户:
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
的唯一性?
答案 0 :(得分:2)
你没有。
您应该在User
中验证用户电子邮件的唯一性。并验证user_id
中store_id
和Permission
的唯一性。
class User < ApplicationRecord
# ...
validates_uniqueness_of :email
end
class Permission < ApplicationRecord
validates_uniqueness_of :user_id, scope: 'store_id'
end
这允许用户拥有多个商店的权限 - 但不允许重复。通常,在将记录链接在一起时,请使用ID - 而不是电子邮件。