ข้อความที่กำหนดเองสำหรับการตรวจสอบความถูกต้องสำหรับราง 3


94

Rails ได้นำเสนอวิธีใหม่ในการตรวจสอบคุณสมบัติภายในโมเดล เมื่อฉันใช้

validates :title, :presence => true

มันใช้งานได้ แต่เมื่อฉันพยายามเพิ่มข้อความที่กำหนดเอง

validates :title, :presence => true,:message => "Story title is required"

ข้อผิดพลาดถูกสร้างขึ้น

Unknown validator: 'message'

คำตอบ:


197

ลองทำตามนี้

validates :title, presence: { message: "Story title is required" }

19
ฉันจะลบ: title ออกจากข้อความแสดงข้อผิดพลาดด้านบนได้อย่างไร ด้านบนจะแสดงเป็น "ต้องระบุชื่อเรื่อง" ฉันต้องการ "ต้องระบุชื่อเรื่อง" ขอบคุณ.
datauser

5
ที่ไหนมี=> trueหายไปในคำตอบนี้หรือไม่? มันไม่จำเป็น?
davetapley

2
@dukedave ผิดปกติพอไม่จำเป็น คุณสามารถส่งผ่านอะไร 'truthy' presenceเพื่อ
อันตราย

1
@NotDan ลิงค์เสีย.
stevenspiel

2
@Mayumi - คุณสามารถลบชื่อแอตทริบิวต์ออกจากข้อความได้โดยการเขียนการตรวจสอบความถูกต้องด้วยตนเองและเพิ่มข้อผิดพลาดลง:baseในตัวอย่างเช่นerrors.add(:base, "Story title is required)
Marco Prins

18

อันที่จริงฉันทำสิ่งนี้ด้วยวิธีที่ดีกว่านี้ หากคุณต้องการลบชื่อฟิลด์ออกจากข้อความคุณควรใช้สิ่งนี้ในมุมมอง _form.htmk.erb ของคุณ:

ดังที่คุณเห็นในมุมมองนี้:

<ul>
  <% @article.errors.full_messages.each do |msg| %>
  <li><%= msg %></li>
  <% end %>
</ul>

แทนที่โดย:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>

Htmk? ทำไมฉันไม่เคย
Marco Prins


0

คุณสามารถใช้ HUMANIZED_ATTRIBUTES ของราง 3 ตัวอย่างเช่นในกรณีข้างต้นจะเป็นดังนี้:

HUMANIZED_ATTRIBUTES = {
:title => "story"
}
 def self.human_attribute_name(attr, options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end

มันจะแสดงข้อความแสดงข้อผิดพลาดโดยแทนที่ชื่อแอตทริบิวต์ model ด้วย story

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.