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_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 - 而不是电子邮件之类的东西。
我有这三个模型:
用户:
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_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 - 而不是电子邮件之类的东西。