Rails 오류 메시지 제출 방법 오류 확인
개시하다
비망록을 위해 DB에 수치를 저장할 때(사용자 등록이나 트위터 등록 등) 검증 오류문을 표시하는 방법을 기록했다.
참고로 해주세요.
발리가 뭐예요?
발리데이는 DB에 수치를 저장할 때 어떤 값을 빠뜨리면 저장할 수 없는 것을 말한다.
쉽게 말하면 필터 같은 거야.
예를 들어 사용자가 로그인할 때 password를 입력하십시오.패스워드가'111'이면 안전성이 달아져요.
따라서 패스워드를 8자 이상으로 기재하지 않으면 등록할 수 없으며'111'을 입력해도 저장할 수 없습니다.
발리일의 조합 방법은 매우 많은데 방법을 바꾸면 자신의 생각대로 가치를 보존할 수 있다.
예1)
모델에 아래와 같이 기재되어 있으면 빈 채로 저장할 수 없습니다.
product.rbclass User < ApplicationRecord
validates :title, presence: true
end
예2)
모형에 아래와 같이 기재하면 한자만 저장할 수 있다.
product.rbclass User < ApplicationRecord
kanji = /\A[一-龥]+\z/
validates :name, format: { with: kanji }
end
예3)
모델에 다음과 같이 기재되면'2019-10-04'형식으로만 저장할 수 있다.
product.rbclass User < ApplicationRecord
year_month_day = /\A\d{4}-\d{2}-\d{2}\z/
validates :birthday, presence: true, format: { with: year_month_day }
end
오류 프롬프트 전송 방법
① 저장된 상품의 동작(여기는create)에 저장된 성공/실패의 조건 지점을 기록한다.
여기서 주의해야 할 것은 실패할 때view를 읽을 때render를 사용하십시오.
이유는 잠시 후에 설명하겠습니다.
products_controller.rb def create
@product = Product.new(product_params)
if @product.save
redirect_to controller: :products, action: :index
else
render "new"
end
end
② 오류 메시지의 뷰 만들기
의 if문은 모델입니다.errors.any? 모든 모델에 대한 검증이 가능합니다.
layouts/_error_messages.html.haml-if model.errors.any?
.alert
%ul
-model.errors.full_messages.each do |message|
%li= message
layouts/error_messages.scss .alert {
color:#262626;
background:#FFEBE8;
text-align: center;
border:2px solid #990000;
padding:12px; font-weight:850;
}
③ 오류 프롬프트 표시
그리고 오류 정보를 표시하고 싶은 곳에만 다음 코드를 기록합니다.
products/new.html.haml = render 'layouts/error_messages', model: f.object
완성
이렇게 된 느낌.아주 간단합니다.
redirect_to와render의 차이
방금 실패할 때view의 읽기 사용render를 기록했습니다. 이 점에 관해서는 가볍게 만져보겠습니다.
redirect_to와render는 경로를 통과하거나 통과하지 않는 차이가 있습니다.
redirect_경로를 통해view 페이지를 다시 호출합니다.
render... 경로를 통과하지 않고view 페이지로 날아갑니다.
공식적으로는 더 큰 차이가 있지만 일단 이걸로 인식하면 돼.
따라서 실패할 때의view 읽기 (아래 부분) 를redirect로 합니다하면, 만약, 만약...
새 보기 페이지가 호출되었기 때문에, 페이지에 쓰여진if문장은 반응하지 않습니다.
products_controller.rb def create
~省略~
else
render "new"
end
end
끝말
특정한gem(예를 들어 devise 등)은 처음부터 실현될 수 있다.
꼭 조사해 주세요
Reference
이 문제에 관하여(Rails 오류 메시지 제출 방법 오류 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakanishi03/items/d1be27c74c98855423ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
발리데이는 DB에 수치를 저장할 때 어떤 값을 빠뜨리면 저장할 수 없는 것을 말한다.
쉽게 말하면 필터 같은 거야.
예를 들어 사용자가 로그인할 때 password를 입력하십시오.패스워드가'111'이면 안전성이 달아져요.
따라서 패스워드를 8자 이상으로 기재하지 않으면 등록할 수 없으며'111'을 입력해도 저장할 수 없습니다.
발리일의 조합 방법은 매우 많은데 방법을 바꾸면 자신의 생각대로 가치를 보존할 수 있다.
예1)
모델에 아래와 같이 기재되어 있으면 빈 채로 저장할 수 없습니다.
product.rb
class User < ApplicationRecord
validates :title, presence: true
end
예2)모형에 아래와 같이 기재하면 한자만 저장할 수 있다.
product.rb
class User < ApplicationRecord
kanji = /\A[一-龥]+\z/
validates :name, format: { with: kanji }
end
예3)모델에 다음과 같이 기재되면'2019-10-04'형식으로만 저장할 수 있다.
product.rb
class User < ApplicationRecord
year_month_day = /\A\d{4}-\d{2}-\d{2}\z/
validates :birthday, presence: true, format: { with: year_month_day }
end
오류 프롬프트 전송 방법
① 저장된 상품의 동작(여기는create)에 저장된 성공/실패의 조건 지점을 기록한다.
여기서 주의해야 할 것은 실패할 때view를 읽을 때render를 사용하십시오.
이유는 잠시 후에 설명하겠습니다.
products_controller.rb def create
@product = Product.new(product_params)
if @product.save
redirect_to controller: :products, action: :index
else
render "new"
end
end
② 오류 메시지의 뷰 만들기
의 if문은 모델입니다.errors.any? 모든 모델에 대한 검증이 가능합니다.
layouts/_error_messages.html.haml-if model.errors.any?
.alert
%ul
-model.errors.full_messages.each do |message|
%li= message
layouts/error_messages.scss .alert {
color:#262626;
background:#FFEBE8;
text-align: center;
border:2px solid #990000;
padding:12px; font-weight:850;
}
③ 오류 프롬프트 표시
그리고 오류 정보를 표시하고 싶은 곳에만 다음 코드를 기록합니다.
products/new.html.haml = render 'layouts/error_messages', model: f.object
완성
이렇게 된 느낌.아주 간단합니다.
redirect_to와render의 차이
방금 실패할 때view의 읽기 사용render를 기록했습니다. 이 점에 관해서는 가볍게 만져보겠습니다.
redirect_to와render는 경로를 통과하거나 통과하지 않는 차이가 있습니다.
redirect_경로를 통해view 페이지를 다시 호출합니다.
render... 경로를 통과하지 않고view 페이지로 날아갑니다.
공식적으로는 더 큰 차이가 있지만 일단 이걸로 인식하면 돼.
따라서 실패할 때의view 읽기 (아래 부분) 를redirect로 합니다하면, 만약, 만약...
새 보기 페이지가 호출되었기 때문에, 페이지에 쓰여진if문장은 반응하지 않습니다.
products_controller.rb def create
~省略~
else
render "new"
end
end
끝말
특정한gem(예를 들어 devise 등)은 처음부터 실현될 수 있다.
꼭 조사해 주세요
Reference
이 문제에 관하여(Rails 오류 메시지 제출 방법 오류 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakanishi03/items/d1be27c74c98855423ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def create
@product = Product.new(product_params)
if @product.save
redirect_to controller: :products, action: :index
else
render "new"
end
end
-if model.errors.any?
.alert
%ul
-model.errors.full_messages.each do |message|
%li= message
.alert {
color:#262626;
background:#FFEBE8;
text-align: center;
border:2px solid #990000;
padding:12px; font-weight:850;
}
= render 'layouts/error_messages', model: f.object
방금 실패할 때view의 읽기 사용render를 기록했습니다. 이 점에 관해서는 가볍게 만져보겠습니다.
redirect_to와render는 경로를 통과하거나 통과하지 않는 차이가 있습니다.
redirect_경로를 통해view 페이지를 다시 호출합니다.
render... 경로를 통과하지 않고view 페이지로 날아갑니다.
공식적으로는 더 큰 차이가 있지만 일단 이걸로 인식하면 돼.
따라서 실패할 때의view 읽기 (아래 부분) 를redirect로 합니다하면, 만약, 만약...
새 보기 페이지가 호출되었기 때문에, 페이지에 쓰여진if문장은 반응하지 않습니다.
products_controller.rb
def create
~省略~
else
render "new"
end
end
끝말
특정한gem(예를 들어 devise 등)은 처음부터 실현될 수 있다.
꼭 조사해 주세요
Reference
이 문제에 관하여(Rails 오류 메시지 제출 방법 오류 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakanishi03/items/d1be27c74c98855423ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails 오류 메시지 제출 방법 오류 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakanishi03/items/d1be27c74c98855423ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)