Rails 오류 메시지 제출 방법 오류 확인

6275 단어 발리Rails

개시하다


비망록을 위해 DB에 수치를 저장할 때(사용자 등록이나 트위터 등록 등) 검증 오류문을 표시하는 방법을 기록했다.
참고로 해주세요.

발리가 뭐예요?


발리데이는 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 등)은 처음부터 실현될 수 있다.
꼭 조사해 주세요

좋은 웹페이지 즐겨찾기