Значения Phoenix/Ecto - integer в столбце массива Postgres не получены

Старался строить схемы для существующего набора таблиц с использованием Ecto 2.1 в приложении ******* 1.3.0.

Пример:

defmodule Book do use Ecto.Schema schema "books" do field :title, :string field :owner_ids, {:array, :integer} field :borrower_ids, {:array, :integer} field :published, :boolean end
end

На консоли, когда я делаю Book |> first |> Repo.one, я вижу, что owner_ids напечатаны правильно ["29"], но на borrower_ids отображается "$". Проверено с помощью psql что заемщик_ид для этой строки в таблице имеет список значений в таблице, точно так же, как и столбец owner_ids. Все остальные столбцы в таблице печатаются очень хорошо. Что-нибудь мне здесь не хватает? Обновление: Rails/ActiveRecord 5.1.4 удалось получить эту таблицу и строку просто отлично.

1 ответ

'$' - это список, содержащий число 36:

iex> [36]
'$'

Вкратце, каждый раз, когда Elixir видит список целых чисел, представляющих символы ASCII, он печатает их между одинарными кавычками, потому что это то, что строки Erlang представлены (также называемые charlists).

i помощник в IEx очень полезен в этих ситуациях. Когда вы видите значение, которое не понимаете, вы можете использовать его для получения дополнительной информации:

iex(2)> i '$'
Term '$'
Data type List
Description This is a list of integers that is printed as a sequence of characters delimited by single quotes because all the integers in it represent valid ASCII characters. Conventionally, such lists of integers are referred to as "charlists" (more precisely, a charlist is a list of Unicode codepoints, and ASCII is a subset of Unicode).
Raw representation [36]
Reference modules List

licensed under cc by-sa 3.0 with attribution.