2016-05-15 15 views
5

Tôi muốn đặt lỗi trên Ecto.Changeset không cụ thể cho trường.Cách thêm lỗi toàn cầu vào Ecto Changeset

Trong trường hợp của tôi, tôi có biểu mẫu đăng nhập và tôi muốn đặt lỗi nói rằng email hoặc mật khẩu không hợp lệ. Tuy nhiên, tôi vẫn muốn đánh dấu trường email hoặc password khi chúng trống.

Trong Rails bạn có thể thực hiện điều đó bằng cách thêm mục nhập vào errors[:base]. Có tương đương với Ecto không?

Trả lời

10

Ecto.Changeset.add_error cho phép bạn chuyển bất kỳ nguyên tử nào làm khóa, nó không phải là trường của mô hình đó. Bạn có thể thêm các lỗi để :base như thế này:

add_error(changeset, :base, "email or password is invalid") 

và sau đó trong mẫu của bạn, hoặc làm:

<%= error_tag f, :base %> 

hoặc (sau khi kiểm tra nếu có một lỗi):

<%= @changeset.errors[:base] %> 

Một tùy chọn khác cho usecase của bạn là thêm lỗi trên cả hai :email:password

changeset 
|> add_error(:email, "email or password is invalid") 
|> add_error(:password, "email or password is invalid") 
+0

Tôi phải thay đổi nó thành '<% = error_tag @changeset,: base%> – flp

Các vấn đề liên quan