นี่เป็นอีกวิธีหนึ่ง:
หากคุณใช้เทมเพลตนี้:
<% 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 ไม่สามารถว่าง"