Ruby on rails 验证多态关联模型中的作用域唯一性
对,所以我有一个多态关联,允许不同的对象类型被偏爱。所以一个人可以喜欢一种产品,或者一个人,或者其他任何东西。我想做的是防止有人使用favorite模型中的validates唯一性复制favoriteRuby on rails 验证多态关联模型中的作用域唯一性,ruby-on-rails,Ruby On Rails,对,所以我有一个多态关联,允许不同的对象类型被偏爱。所以一个人可以喜欢一种产品,或者一个人,或者其他任何东西。我想做的是防止有人使用favorite模型中的validates唯一性复制favorite class Favorite < ActiveRecord::Base belongs_to :favoritable, :polymorphic => true belongs_to :user attr_accessible :user validates_presen
class Favorite < ActiveRecord::Base
belongs_to :favoritable, :polymorphic => true
belongs_to :user
attr_accessible :user
validates_presence_of :user
validates :user_id, :uniqueness => { :scope => [:favoritable_type, :favoritable_id] }
end
如果仔细观察,您会发现唯一性验证工作正常:) 查看您添加的数据图像。在图像内部,您可以发现第二条记录没有
有利的
,而第一条记录则不同,因此有两条记录是uniq,它不存在唯一性的问题
,而是您的逻辑差距
如果您严格地希望避免第二次输入,则将有利的
保留为必填字段
validates :favoritable_type, :favoritable_id, :presence => true
class收藏夹
很抱歉,这会导致收藏夹存在(0.4ms)从“收藏夹”中选择1作为其中一个(“收藏夹”。“用户id”=36和“收藏夹”。“收藏夹类型”为空且“收藏夹”。“收藏夹id”为空)限制1(0.1ms)回滚在243ms ActiveRecord::RecordInvalid中完成500个内部服务器错误(验证失败:Favoritable类型不能为空,Favoritable不能为空):您还可以通过迁移向表中添加唯一性约束:add_index(:favorite,[:user_id,:Favoritable_type,:Favoritable_id],:unique=>true,:name=>“allowed_one_favorite”)
Abram:您有没有想到这一点?
validates :user_id, :uniqueness => { :scope => [:favoritable_type, :favoritable_id] }
validates :favoritable_type, :favoritable_id, :presence => true
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :favoritable, polymorphic: true
validates :user_id, :favoritable_id, presence: true,
numericality: { only_integer: true }
validates :favoritable_type, presence: true,
inclusion: {
in: %w(FirstModelName SecondModelName),
message: "%{value} is not a valid"
}
validates :user_id, uniqueness: { scope: [ :favoritable_type, :favoritable_id ] }
end