Đây là một cách khác:
Nếu bạn sử dụng mẫu này:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Bạn có thể viết tin nhắn tùy chỉnh của riêng bạn như thế này:
class Thing < ActiveRecord::Base
validate :custom_validation_method_with_message
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:_, "My custom message")
end
end
Bằng cách này, vì gạch dưới, thông báo đầy đủ trở thành "Thông điệp tùy chỉnh của tôi", nhưng không gian thừa ở đầu không được chú ý. Nếu bạn thực sự không muốn có thêm không gian lúc đầu, chỉ cần thêm .lstrip
phương thức.
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
Phương thức String.lstrip sẽ loại bỏ không gian thừa được tạo bởi ': _' và sẽ không thay đổi bất kỳ thông báo lỗi nào khác.
Hoặc thậm chí tốt hơn, sử dụng từ đầu tiên của tin nhắn tùy chỉnh của bạn làm chìa khóa:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
Bây giờ, toàn bộ tin nhắn sẽ là "Tin nhắn tùy chỉnh của tôi" không có thêm dung lượng.
Nếu bạn muốn thông báo đầy đủ bắt đầu bằng một từ viết hoa như "URL không thể để trống" thì không thể thực hiện được. Thay vào đó hãy thử thêm một số từ khác làm chìa khóa:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
Bây giờ, thông báo đầy đủ sẽ là "URL không thể để trống"