Значения 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.