有没有办法弄清楚结构是否持久存在?我开始为Ecto的toDateString()
挖掘源代码,但没有运气,因为它遇到了一些私人方法。我想要这样的东西:
insert_or_update
是否有可能,或者我正在做一些愚蠢的事情?
答案 0 :(得分:5)
您可以检查结构的.__meta__.state
。如果它是一个新的(不是持久的),它将是:built
,如果它是从数据库加载的(持久化的),那么它将是:loaded
:< / p>
iex(1)> Ecto.get_meta(%Post{}, :state)
:built
iex(2)> Ecto.get_meta(Repo.get!(Post, 1), :state)
:loaded
答案 1 :(得分:0)
您可以检查struct.data.id
的主键是否为id
:
defp do_a_thing_on_unsaved_struct(struct) do
if struct.data.id, do: struct, else: do_things(struct)
end