thông báo tùy chỉnh xác thực cho đường ray 3


94

Rails đã giới thiệu một cách mới để xác thực các thuộc tính bên trong mô hình. Khi tôi sử dụng

validates :title, :presence => true

nó hoạt động nhưng khi tôi cố gắng thêm một thông báo tùy chỉnh

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

một lỗi được tạo ra

Unknown validator: 'message'

Câu trả lời:


196

Thử cái này

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

19
Làm cách nào để xóa: title khỏi thông báo lỗi ở trên? Phía trên hiển thị là "Tiêu đề Câu chuyện Tiêu đề là bắt buộc". Tôi muốn "Tiêu đề câu chuyện là bắt buộc." Cảm ơn.
datauser

5
Ở đâu có => true đi trong câu trả lời này? Nó không cần thiết?
davetapley 23/02/12

2
@dukedave kỳ lạ là nó không cần thiết. Bạn có thể chuyển bất cứ thứ gì 'sự thật' cho presence.
hại

1
@NotDan, liên kết bị hỏng.
stevenspiel

2
@Mayumi - Bạn có thể xóa tên thuộc tính khỏi thư bằng cách viết xác thực thủ công và thêm lỗi vào :base, chẳng hạn nhưerrors.add(:base, "Story title is required)
Marco Prins

18

Trên thực tế, tôi đã làm điều này theo một cách tốt hơn. Nếu bạn muốn xóa tiêu đề trường khỏi thư, bạn nên sử dụng tiêu đề này trên chế độ xem _form.htmk.erb của mình:

Như bạn có thể thấy bên trong chế độ xem này:

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

Thay thế nó bằng:

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

Htmk? Tại sao, TÔI KHÔNG BAO GIỜ
Marco Prins

1

Thông báo tùy chỉnh cho boolean với các điều kiện có thể là:

validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?

0

Bạn có thể sử dụng HUMANIZED_ATTRIBUTES đường ray 3. Ví dụ trong trường hợp trên, nó sẽ như sau:

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

Nó sẽ cung cấp cho bạn thông báo lỗi, thay thế tiêu đề thuộc tính mô hình bằng câu chuyện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.