Рамка Phoenix - проверка пользовательских изменений
Я действительно новичок в фениксе и эликсире, поэтому извиняюсь, если это похоже на простые вопросы. Я искал переполнение стека и блоги, прежде чем я подумал о его размещении здесь.
У меня есть 2 поля в модели, поле A: integer и поле B: integer. Выполняя мои проверки с помощью моего набора изменений, я хочу создать специальную проверку, которая проверяет, является ли поле А больше поля b при создании нового элемента, и если это так, запустите сообщение об ошибке и верните их на новый маршрут. Извините, если я не использую правильные термины.
Итак, я думаю, теперь это становится вопросом из двух частей. Во-первых, должен ли я делать это в своей модели, создавая специальную проверку или это должно быть в контроллере? И во-вторых, какой самый простой способ написать это в phoenix?
Спасибо еще раз.
Ответы
Ответ 1
Я должен был сделать это точно, и мне потребовалось немного времени, чтобы понять это. Я закончил писать пользовательский валидатор для набора изменений.
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> validate_a_less_eq_b
end
defp validate_a_less_eq_b(changeset) do
a = get_field(changeset, :a)
b = get_field(changeset, :b)
validate_a_less_eq_b(changeset, a, b)
end
defp validate_a_less_eq_b(changeset, a, b) when a > b do
add_error(changeset, :max, "'A' cannot be more than 'B'")
end
defp validate_a_less_eq_b(changeset, _, _), do: changeset
Вы, конечно, хотели бы использовать регулярные валидаторы, чтобы гарантировать, что a и b являются допустимыми числами.