Repo如何找出表的名称?

时间:2016-09-23 04:44:51

标签: elixir phoenix-framework ecto

我有更多的菜鸟问题。当我做

之类的事情
case MyRepo.insert %Post{title: "Ecto is great"} do
  {:ok, struct}       -> # Inserted with success
  {:error, changeset} -> # Something went wrong
end

Repo如何知道数据库中的哪个表使用?

1 个答案:

答案 0 :(得分:6)

Ecto在模块上定义__schema__函数,该函数调用use Ecto.Schema然后调用schema do ... end。如果您将:source传递给它,则会返回表名。

iex(1)> %MyApp.Post{}
%MyApp.Post{__meta__: #Ecto.Schema.Metadata<:built, "posts">,
 comments: #Ecto.Association.NotLoaded<association :comments is not loaded>,
 id: nil, inserted_at: nil, title: nil, updated_at: nil}
iex(2)> %MyApp.Post{}.__struct__
MyApp.Post
iex(3)> %MyApp.Post{}.__struct__.__schema__(:source)
"posts"

__schema__接受的各种论据都记录在案here