在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能够正确检索此表和行。
答案 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