Rails 5: ActiveRecord 查询加入的最后一个对象 table with OR condition
Rails 5: ActiveRecord query last object in a joined table with OR condition
我需要一些帮助来查询这里 (Rails 5.1)。我有一个名为 Verification
(belongs_to :verifiable, polymorphic: true
) 的多态关联对象。其他对象,如 Comment
,可以有 verifications
(has_many :verifications, as: :verifiable
),最后一个(按 id
排序)被认为是当前的。 Verification
有一个枚举 属性 status
。我需要检索具有特定 user_id
(当前用户之一)或 current(即最后一个)状态正确的验证对象(例如,approved
).
所以,我正在尝试:
self.where(user_id: user.id).or(self.joins(:verifications).limit(1).where(verifications: { status: 'approved' }))
但是 Rails 给我以下错误:
Relation passed to #or must be structurally compatible. Incompatible values: [:joins, :references, :limit]
我该怎么办?
我无法让它在一个查询中工作(我的 Arel 尝试失败了)。所以希望以下内容就足够了(测试工作):
latest_verification_ids = Verification.group(:verifiable_id).maximum(:id).values
# SELECT MAX("verifications"."id") AS maximum_id, "verifications"."verifiable_id" AS verifications_verifiable_id FROM "verifications" GROUP BY "verifications"."verifiable_id"
comments_whose_user_id_is_user_id_or_whose_last_verification_is_approved =
Comment
.where(user_id: user_id)
.or(
Comment.where(id:
Comment.joins(:verifications)
.where(
verifications: {
id: latest_verification_ids,
status: 'approved'
}
)
)
)
# SELECT "comments".* FROM "comments" WHERE ("comments"."user_id" = ? OR "comments"."id" IN (SELECT "comments"."id" FROM "comments" INNER JOIN "verifications" ON "verifications"."verifiable_id" = "comments"."id" AND "verifications"."verifiable_type" = ? WHERE "verifications"."id" IN (4, 2) AND "verifications"."status" = ?)) [["user_id", 1], ["verifiable_type", "Comment"], ["status", "approved"]]
我需要一些帮助来查询这里 (Rails 5.1)。我有一个名为 Verification
(belongs_to :verifiable, polymorphic: true
) 的多态关联对象。其他对象,如 Comment
,可以有 verifications
(has_many :verifications, as: :verifiable
),最后一个(按 id
排序)被认为是当前的。 Verification
有一个枚举 属性 status
。我需要检索具有特定 user_id
(当前用户之一)或 current(即最后一个)状态正确的验证对象(例如,approved
).
所以,我正在尝试:
self.where(user_id: user.id).or(self.joins(:verifications).limit(1).where(verifications: { status: 'approved' }))
但是 Rails 给我以下错误:
Relation passed to #or must be structurally compatible. Incompatible values: [:joins, :references, :limit]
我该怎么办?
我无法让它在一个查询中工作(我的 Arel 尝试失败了)。所以希望以下内容就足够了(测试工作):
latest_verification_ids = Verification.group(:verifiable_id).maximum(:id).values
# SELECT MAX("verifications"."id") AS maximum_id, "verifications"."verifiable_id" AS verifications_verifiable_id FROM "verifications" GROUP BY "verifications"."verifiable_id"
comments_whose_user_id_is_user_id_or_whose_last_verification_is_approved =
Comment
.where(user_id: user_id)
.or(
Comment.where(id:
Comment.joins(:verifications)
.where(
verifications: {
id: latest_verification_ids,
status: 'approved'
}
)
)
)
# SELECT "comments".* FROM "comments" WHERE ("comments"."user_id" = ? OR "comments"."id" IN (SELECT "comments"."id" FROM "comments" INNER JOIN "verifications" ON "verifications"."verifiable_id" = "comments"."id" AND "verifications"."verifiable_type" = ? WHERE "verifications"."id" IN (4, 2) AND "verifications"."status" = ?)) [["user_id", 1], ["verifiable_type", "Comment"], ["status", "approved"]]