각 양식에 대해 유효성 검증 오류 메시지를 표시하고 싶습니다.
유효성이 검증된 오류 메시지 표시 정보
보다 간단한 방법 가르쳐 주셨으면 하기 때문에 qiita에 memo로서 올렸습니다.
이런 건 잘 봐
hogehoge.html.haml
= form_for @hogehoge do |f|
- if @hogehoge.errors.any?
%ul
- @hogehoge.errors.full_messages.each do |msg|
%li= msg
이런 식으로 함께 메시지를 표시합니다.
하지만 ↓처럼 표시하고 싶습니다.
이런 것은 자주 있는 이야기라고 생각해 gem라든지 플러그인으로 해결할 수 있을 것이라고 생각해 가서 봐도 꽤 좋은 정보가 발견되지 않고 곤란하다.
첫 번째 솔루션
@xxxx.errors.messages에서 검색
@xxxx.errors.messages[:zipcode][0]에 오류 메시지가 포함되어 있으므로 표시
.field
= f.label :zipcode
= f.text_field :zipcode
%p{class: 'error'}[email protected][:zipcode][0]
단점
두 번째 솔루션
formBuilder 만들기
참고 : http://mmmpa.hatenablog.com/entry/2015/01/12/Rails_%E3%81%AE_form_for_%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC% E5%87%BA%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%80%81%E3%82%A8%E3%83%A9%E3% 83%BC%E3%81%AF%E3%81%A1%E3%82%83%E3%82%93%E3%81%A8%E3%82%A8
만마 사용해보기
builders/with_error_form_builder.rb
class WithErrorFormBuilder < ActionView::Helpers::FormBuilder
def pick_errors(attribute)
return nil if @object.nil? || (messages = @object.errors.messages[attribute]).nil?
lis = messages.collect do |message|
%{<li>#{message}</li>}
end.join
%{<ul class="errors">#{lis}</ul>}.html_safe
end
def text_field(attribute, options={})
return super if options[:no_errors]
super + pick_errors(attribute)
end
end
이렇게 되었다. 항목명을 내고 싶다・・・.
@hogehoge.errors.full_messages는 항목 이름 + 오류 내용이므로
이것을 생성하는 메소드 찾기
~/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activemodel-4.2.6/lib/active_model/errors.rb
# Returns a full message for a given attribute.
#
# person.errors.full_message(:name, 'is invalid') # => "Name is invalid"
def full_message(attribute, message)
return message if attribute == :base
attr_name = attribute.to_s.tr('.', '_').humanize
attr_name = @base.class.human_attribute_name(attribute, default: attr_name)
I18n.t(:"errors.format", {
default: "%{attribute} %{message}",
attribute: attr_name,
message: message
})
end
full_message를 사용하여 메시지를 조립하여 만들었습니다.
builders/with_errror_form_builder.rb
class WithErrorFormBuilder < ActionView::Helpers::FormBuilder
def pick_errors(attribute)
return nil if @object.nil? || (messages = @object.errors.messages[attribute]).nil?
lis = messages.collect do |message|
%{<li>#{@object.errors.full_message(attribute, message)}</li>}
end.join
%{<ul class="errors">#{lis}</ul>}.html_safe
end
def text_field(attribute, options={})
return super if options[:no_errors]
super + pick_errors(attribute)
end
end
Reference
이 문제에 관하여(각 양식에 대해 유효성 검증 오류 메시지를 표시하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ytsukamoto/items/269a1a2b32462626190f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)