Я создаю приложение Rails с моделью User
, которая имеет много Telephone
с, и каждый Telephone
has_many :active_admin_comments, foreign_key: "resource_id", class_name: 'ActiveAdmin::Comment'
Идентификатор ресурса представляет собой строку.
Теперь я хотел бы перечислить всех пользователей, их телефоны и комментарии в ActiveAdmin.
panel "Telephones" do
table_for User
.joins({event: :active_admin_comments}) do |t|
t.column('User:') {|res| res}
end
end
Но я получаю следующую ошибку:
PG::UndefinedFunction: ERROR: operator does not exist: character varying = integer LINE 1: ...omments" ON "active_admin_comments"."resource_id" = "telephones"... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. : SELECT "users".* FROM "users" INNER JOIN "users" ON "telephones"."id" = "users"."telephone_id" INNER JOIN "active_admin_comments" ON "active_admin_comments"."resource_id" = "telephones"."id"
Это может быть из-за resource_id
является строкой, а telephone.id
является целым числом.
Я пытался выполнить необработанный запрос, но получил тот же результат.
Как правильно выполнить этот запрос?
====
Редактировать 1:
Я пробовал это, и я не получаю ошибку
query = 'SELECT "users".* FROM "users" INNER JOIN "users" ON "telephones"."id" = "users"."telephone_id" INNER JOIN "active_admin_comments" ON "active_admin_comments"."resource_id" = CAST("telephones"."id" AS varchar)'
hi = ActiveRecord::Base.connection.execute(query)
hi.each do |t|
puts t
end
Он печатает:
{"id"=>"14488", "created_at"=>"2019-06-18 07:49:48.749594", "updated_at"=>"2019-06-18 07:49:48.79131", "telephone_id"=>"12518"}
Если я попытаюсь puts t.active_admin_comments
, я получу: undefined method
active_admin_comments 'для # `