Я новичок в 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
).
Может кто-нибудь, пожалуйста, пролить свет на это? Как Экто это делает?
С уважением