加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 验证多态关联模型中的范围唯一性

发布时间:2020-12-16 20:00:27 所属栏目:百科 来源:网络整理
导读:对,所以我有一个多态关联,允许不同的对象类型被收藏.所以一个人可以喜欢一个产品,一个人,或者什么.我想做的是防止有人使用最喜爱的模型验证唯一性来重复收藏. class Favorite ActiveRecord::Base belongs_to :favoritable,:polymorphic = true belongs_to :u
对,所以我有一个多态关联,允许不同的对象类型被收藏.所以一个人可以喜欢一个产品,一个人,或者什么.我想做的是防止有人使用最喜爱的模型验证唯一性来重复收藏.
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

验证似乎正在工作,但无论如何,当尝试复制条目时,仍然使用user_id创建一个新的“最爱”行.

有没有办法停止这个初始保存?

看来,Rails正在创建DB条目,然后使用favoritable_id和favoritable_type更新它,如下所示:

SQL (28.3ms)  INSERT INTO "favorites" ("created_at","favoritable_id","favoritable_type","updated_at","user_id") VALUES ($1,$2,$3,$4,$5) RETURNING "id"  [["created_at",Tue,14 Aug 2012 10:26:31 UTC +00:00],["favoritable_id",nil],["favoritable_type",["updated_at",["user_id",23]]
   (7.8ms)  COMMIT
   (0.1ms)  BEGIN
  Favorite Exists (0.3ms)  SELECT 1 AS one FROM "favorites" WHERE ("favorites"."user_id" = 23 AND "favorites"."id" != 123 AND "favorites"."favoritable_type" = 'Style' AND "favorites"."favoritable_id" = 29) LIMIT 1
   (0.2ms)  UPDATE "favorites" SET "favoritable_id" = 29,"favoritable_type" = 'Style',"updated_at" = '2012-08-14 10:26:31.943937' WHERE "favorites"."id" = 123
   (6.7ms)  COMMIT
   (0.1ms)  BEGIN

解决方法

如果你仔细观察你可以发现唯一性验证只是工作正常:)
validates :user_id,:favoritable_id] }

看看你添加的数据图像.内部的形象,你可以发现,第二个记录是没有好处,而首先有哪些是不同的,因此2个记录是单一的,它不是唯一性的问题,而是你的逻辑差距.

如果你严格要避免第二次入境,那么请保持好意

validates :favoritable_type,:favoritable_id,:presence => true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读