【发布时间】:2019-03-08 02:16:13
【问题描述】:
我是 Elixir 和 Phoenix 的新手(不到 10 天),但对它非常兴奋,并且和许多其他人一样,我来自 Rails 背景。
我了解 Ecto 不是 AR,并且回调已被弃用或删除,但我需要添加一个自定义验证,该验证仅应在创建时发生并且需要执行查询。
这是我的Reservation 模型的基本外观。
schema "reservations" do
field :ends_at, :utc_datetime
field :name, :string, null: false
field :starts_at, :utc_datetime
field :user_id, :id
end
然后我有另一个架构Slot,看起来像这样:
schema "slots" do
field :ends_at, :utc_datetime
field :name, :string, null: false
field :starts_at, :utc_datetime
field :admin_id, :id
end
每当我添加新的预订时,我都需要查询我的数据库以检查是否有任何插槽与 ends_at 和 starts_at 匹配。如果有,我需要阻止记录被保存并向其添加错误(类似于我们在 Rails 中使用throw :abort 和errors.add 完成的操作)。
有人可以解释一下吗?这样做的 Ecto 方法是什么?
最好的问候
【问题讨论】:
标签: callback elixir phoenix-framework ecto