Phoenix / Ecto - 未检索Postgres数组列中的整数值

时间:2018-01-15 10:39:17

标签: phoenix-framework ecto

在Phoenix 1.3.0应用程序中尝试使用Ecto 2.1为现有的一组表构建模式。

示例:

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验证表中该行的borrower_ids确实在表中包含值列表,与owner_ids列完全相同。 表中的所有其他列都打印得很好。我在这里缺少什么? 更新:Rails / ActiveRecord 5.1.4能够正确检索此表和行。

1 个答案:

答案 0 :(得分:2)

'$'是一个包含数字36的列表:

iex> [36]
'$'

简而言之,每当Elixir看到一个表示ASCII字符的整数列表时,它就会在单引号之间打印它们,因为这就是Erlang字符串的表示方式(也称为charlists)。

IEx中的i助手在这些情况下非常有用。当您看到一个您不理解的值时,可以使用它来询问更多信息:

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