我有一个has_many通过:Token
和User
之间的关联使用UserToken
作为连接模型。我希望将Token模型的device_name
属性上的validate_uniqueness_of
作用域限定为特定的用户。有很多通过关联的范围验证
意思是,如果已经为该用户使用相同的device_name创建了一个令牌记录,我只想验证device_name的唯一性。通常人们可以这样做:validates_uniqueness_of :device_name, scope: :user_id
但是user_id不是Token的属性,这个属性在连接表中......我很难弄清楚如何在Rails中创建这个验证。我知道你可以在数据库级别使用索引,但如果可能的话,我想通过验证来完成。有什么想法吗?
class Token < ActiveRecord::Base
has_many :user_tokens
has_many :users, through: :user_tokens
validates_uniqueness_of :device_name, scope: #only validate if there is already a Token for this user with this device_name.
end
class User < ActiveRecord::Base
has_many :user_tokens
has_many :tokens, through: :user_tokens
end
class UserToken < ActiveRecord::Base
belongs_to :user
belongs_to :token
end