對,所以我有一個多態關聯,允許不同的對象類型被收藏。所以一個人可以喜歡一個產品,或一個人,或其他什麼。我想要做的是防止有人在最喜歡的模型中使用驗證唯一性來複制最愛。驗證多態關聯模型中的作用域唯一性
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正在創建數據庫條目,然後與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", 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
亞伯蘭:你有沒有想出解決辦法? – MAckerman 2014-03-20 17:55:39