1
我有模型Conversation
,User
,它們通過has_many *, through: users_conversations
連接。PG操作員不存在: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[?])", 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)>'
我試圖注入陣列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)']))
你試過任何('連接(:users).where(「users.id = ANY(ARRAY [?])」,ids)')而不是ALL? – imechemi
@imechemi,它不太可能解決問題,也不是我所需要的 –