Ở Controller ta cóchangeset = Ecto.Changeset.add_error(changeset, :email, "Email doesn't exist in DB. Please contact admin")
Còn ở view:<%= form_for @changeset, user_path(@conn, :send_info), [method: :post], fn f -> %>
<%= if f.errors != [] %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below:</p>
</div>
<% end %>
<div class="form-group">
<label>Email</label>
<%= email_input f, :email, class: "form-control" %>
<%= error_tag f, :email %>
</div>
<div class="form-group">
<div class="form-group">
<%= submit "Request", class: "btn btn-primary" %>
</div>
<% end %>
Lúc đầu cứ tưởng đúng, nhưng kết quả là khi lỗi không thấy error hiện ra ??? Hoá ra là, form_for
sẽ kiểm tra action
của changeset
: có hành động nào đang được thực hiện. Nếu có mới thêm lỗi. Đó là lí do ta phải check <% if @changeset.action %>
. Vậy add error là chưa đủ, phải set action
nữa:changeset = Ecto.Changeset.add_error(changeset, :email, "Email doesn't exist in DB. Please contact admin")
changeset = %{changeset | action: :request}