gpt4 book ai didi

ruby-on-rails - 验证多态关联模型中的作用域唯一性

转载 作者:行者123 更新时间:2023-12-03 21:21:24 28 4
gpt4 key购买 nike

是的,所以我有一个多态关联,允许收藏不同的对象类型。所以一个人可以喜欢一个产品,一个人,或者其他什么。我想要做的是防止有人使用验证收藏夹模型中的唯一性来复制收藏夹。

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 创建一个新的收藏夹行。

enter image description here

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

似乎 Rails 正在创建 DB 条目,然后使用 favourable_id 和 favourable_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", nil], ["updated_at", Tue, 14 Aug 2012 10:26:31 UTC +00:00], ["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, :uniqueness => { :scope => [:favoritable_type, :favoritable_id] }

查看您添加的数据图像。在图像中,您可以发现第二条记录没有 favouritable而第一个是不同的,因此 2 条记录是 uniq 并且它没有问题 uniqueness但它是你的逻辑差距。

如果您确实想避免第二次进入,请​​保留 favouritable作为必填字段
validates :favoritable_type, :favoritable_id, :presence => true

关于ruby-on-rails - 验证多态关联模型中的作用域唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11950373/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com