Как сделать запрос с приведением? - PullRequest
0 голосов
/ 28 июня 2019

Я создаю приложение 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 'для # `

...