gpt4 book ai didi

ruby-on-rails - PG运算符不存在 : uuid = text

转载 作者:行者123 更新时间:2023-11-29 12:10:38 25 4
gpt4 key购买 nike

我有模型ConversationUser,它们通过has_many *,通过:users_conversations 连接。

我有这个范围:

class Conversation < ActiveRecord::Base
has_many :users_conversations
has_many :users, through: :users_conversations

scope :by_participants, ->(ids) {
joins(:users).where("users.id = ALL (ARRAY[?])", ids)
}
end

期望找到所有需要的用户都参与(严格)的对话。

Conversation.by_participants first 
Failure/Error: its(:first) {is_expected.to eq(@conversation)}

ActiveRecord::StatementInvalid:
PG::UndefinedFunction: ERROR: operator does not exist: uuid = text
LINE 1: ...= "users_conversations"."user_id" WHERE (users.id = ALL (ARR...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "conversations".* FROM "conversations" INNER JOIN "users_conversations" ON "users_conversations"."conversation_id" = "conversations"."id" INNER JOIN "users" ON "users"."id" = "users_conversations"."user_id" WHERE (users.id = ALL (ARRAY['7c1a06c8-10c7-417f-96ea-c9c50fcaed35','8af2beca-d5f2-48d7-9857-7b5d124eaac1'])) ORDER BY "conversations"."id" ASC LIMIT 1
# ./spec/models/conversation_spec.rb:19:in `block (3 levels) in <top (required)>'

我试图注入(inject)数组 cast (*) as uuid,但 PG 似乎认为这只是字符串:

HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "conversations".* FROM "conversations" INNER JOIN "users_conversations" ON "users_conversations"."conversation_id" = "conversations"."id" INNER JOIN "users" ON "users"."id" = "users_conversations"."user_id" WHERE (users.id = ALL (ARRAY['cast (6d4ff0b3-e148-40f8-87b5-d4d03577577a as uuid)','cast (432f4f6e-5832-4831-80dc-c747b8d3e742 as uuid)']))

最佳答案

你试过吗

class Conversation < ActiveRecord::Base
has_many :users_conversations
has_many :users, through: :users_conversations

scope :by_participants, ->(ids) {
joins(:users).where("users.id = ALL (ARRAY[?]::uuid[])", ids)
# it's all about ARRAY[?]::uuid[] type cast
}
end

您的目标列是 ::uuid[] 但源是 text,只需键入 cast 并查看结果。

关于ruby-on-rails - PG运算符不存在 : uuid = text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37467115/

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