นี่เป็นอีกวิธีหนึ่ง:
หากคุณใช้เทมเพลตนี้:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
คุณสามารถเขียนข้อความที่คุณกำหนดเองดังนี้:
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
ด้วยวิธีนี้เนื่องจากขีดเส้นใต้ข้อความเต็มกลายเป็น "ข้อความที่กำหนดเองของฉัน" แต่พื้นที่พิเศษในตอนเริ่มต้นไม่สามารถสังเกตเห็นได้ หากคุณไม่ต้องการพื้นที่พิเศษที่จุดเริ่มต้นเพียงเพิ่ม.lstrip
วิธีการ
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
กระบวนการ String.lstrip จะกำจัดพื้นที่พิเศษที่สร้างขึ้นโดย ': _' และจะทำให้ข้อความผิดพลาดอื่น ๆ ไม่เปลี่ยนแปลง
หรือดีกว่านั้นใช้คำแรกของข้อความที่คุณกำหนดเองเป็นคีย์:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
ตอนนี้ข้อความเต็มจะเป็น "ข้อความที่กำหนดเองของฉัน" โดยไม่มีพื้นที่เพิ่มเติม
หากคุณต้องการให้ข้อความเต็มเริ่มต้นด้วยคำที่พิมพ์ใหญ่เช่น "URL ต้องไม่ว่างเปล่า" จะไม่สามารถทำได้ ลองเพิ่มคำอื่น ๆ แทนคีย์:
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
ตอนนี้ข้อความเต็มจะเป็น "URL ไม่สามารถว่าง"