레일 3에 대한 유효성 검사 사용자 지정 메시지


94

Rails는 모델 내부의 속성을 검증하는 새로운 방법을 도입했습니다. 내가 사용할 때

validates :title, :presence => true

작동하지만 사용자 지정 메시지를 추가하려고 할 때

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

오류가 발생합니다

Unknown validator: 'message'

답변:


196

이 시도

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

19
위의 오류 메시지에서 : title을 어떻게 제거합니까? 위는 "Title Story 제목이 필요합니다"로 표시됩니다. "스토리 제목이 필요합니다." 감사.
datauser

5
=> true이 답변에서 어디로 갔습니까? 필요하지 않습니까?
davetapley

2
@dukedave 이상하게도 필요하지 않습니다. '진정한'모든 것을 presence.
해로움

1
@NotDan, 링크가 끊어졌습니다.
stevenspiel

2
@Mayumi-수동 유효성 검사를 작성하고에 오류를 추가하여 메시지에서 속성 이름을 제거 할 수 있습니다. :baseerrors.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

1

조건이있는 부울에 대한 사용자 정의 메시지는 다음과 같습니다.

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

0

레일 3의 HUMANIZED_ATTRIBUTES를 사용할 수 있습니다. 예를 들어 위의 경우 다음과 같습니다.

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

모델 속성 제목을 스토리로 대체하는 오류 메시지가 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.