Rails에서 인증 오류 메시지 분해 시도
자신의 재검토로 더 잘 사용하고 싶어요!
이게 뭐야?
저장할 때 잘못된 정보를 표시하는 방법은 없습니다. 조사하면 바로 나오지만 내용에 따라 동작을 바꿀 때 사용합니다.
개발 환경
ruby 2.6.3
Rails 5.2.4.4
작업 준비 1-MVC 기타 제작
콘솔
$ rails new sample_app
$ cd sample_app
$ rails g scaffold post title:string body:text
$ rails db:migrate
이런 느낌으로 나는 title
열과 body
열이 있는 posts
표를 만들었다.작업 준비 2 - 설정 검증
title
공백 불가, 5글자 이내body
공백 불가post.rb
class Post < ApplicationRecord
validates :title, presence: true, length: { maximum: 5 }
validates :body, presence: true
end
지금위에서 설명한 바와 같이 조건이 충족되지 않는 게시물은 저장되지 않습니다.
그러나 잘못된 정보를 표시하는 보기
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
이렇게 이것을 분해하는 것이 이번 주제다.오류 정보 내용
gem
pry-byebyg
을 사용하여 오류 메시지를 보십시오.(설치 방법 등 할애)posts_controller.rb
def create
@post = Post.new(post_params)
if @post.save
redirect_to post_path(@post.id)
else
binding.pry #この位置
render :new
end
end
[1] pry(#<PostsController>)> @post.errors.messages
=> {:title=>["is too long (maximum is 5 characters)"], :body=>["can't be blank"]}
[2] pry(#<PostsController>)> @post.errors.full_messages
=> ["Title is too long (maximum is 5 characters)", "Body can't be blank"]
결과는 이렇다.앞의 보기에서 [2]의 결과 수조가 each를 통해 출력되는 것을 보았습니다.이것을 바탕으로 다양한 시도를 해 보자.[1]에서 오류 메시지 변경 시도
posts_controller.rb
def create
@post = Post.new(post_params)
if @post.save
redirect_to post_path(@post.id)
else
@post.errors.messages[:body] = ["は空欄には出来ません。"] #追加
render :new
end
end
이렇게 해보니까...
[2]에서 잘못된 정보에 따라 마이그레이션 대상 변경
posts_controller.rb
def create
@post = Post.new(post_params)
if @post.save
redirect_to post_path(@post.id)
else
if @post.errors.full_messages.any? { |t| "Title can't be blank".include?(t) }
redirect_to titleblank_path
elsif @post.errors.full_messages.any? { |t| "Title is too long (maximum is 5 characters)".include?(t) }
redirect_to titletoolong_path
else
redirect_to bodyblank_path
end
end
end
이렇게 설정하면... (라우팅은 별도로 설정됨)잘못된 정보에 따라 마이그레이션 목표를 변경할 수도 있습니다.
끝내다
나는 많은 것을 남겨두고 자신을 재검토할 수 있는 기회가 됐으면 좋겠다고 생각한다.
Reference
이 문제에 관하여(Rails에서 인증 오류 메시지 분해 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KKe-coder/items/efd204af5bbff88c417b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)