【devise】 디폴트 맛없는 flash 메시지에 Bootstrap을 적용 ~ 미해결 수수께끼가 하나 ~
오늘의 수수께끼는 이쪽
요전날 구현한 내용이지만 신규 투고시나 사용자 정보 편집시, 또는 실패시 등에 헤더 아래에 flash 메시지를 표시하고 있다.
각각의 액션이 성공했을 때 or 실패했을 때에 메시지를 바꾸고, 표시의 색도 바꾸는 설정을 컨트롤러에 기술해 잘 되었다.
 
  
 결합 테스트 코드로 로그인할 수 있을지 어떨지를 체크하고 있으면 화면에 일순 이상한 flash 메세지가 나타났다.

Eメールまたはパスワードが違います。이 녀석은 도대체 어디에서 오는지 검색을 하면 에러 메시지를 일본어화하고 있는 파일로부터 불려 가고 있다.처음에는 CSS에서 개별적으로 맞을까 생각했지만, alert 그 자체에 걸면 기존에서 걸려 있는 것에도 영향을 버린다는 것을 깨닫고 다른 방법을 찾는 것에.
그래서 devise의 flash 메시지 그 자체에 Bootstrap을 맞으면 해결하는 것이 아닐까 생각해 조사해 해결했다.
1·devise의 helper 메소드를 정의
app/helpers/devise_helper.rb
module DeviseHelper
  def bootstrap_alert(key)
    case key
    when "alert"
      "danger"
    when "notice"
      "dark"
    when "error"
      "danger"
    end
  end
end
"alert" 는 로그인 성공시 등에 표시"notice" 는 게시 성공시 등에 표시"error"는 오류가 발생했을 때 표시됩니다.Bootstrap 의 공식으로 색이 많이 해설되고 있으므로 자세한 것은 그쪽을 봐 주세요.
2 · views/layouts/_flashes.html.erb 파일 변경
views/layouts/_flashes.html.erb
<% flash.each do |key, value| %>
  <div class="alert alert-<%= bootstrap_alert(key) %> alert-dismissible fade show">
    <span><%= value %></span>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">×</span>
    </button>
  </div>
<% end %>
이제 변경되었습니다.

만약을 위해 컨트롤러로 정의하고 있는 쪽도 확인해 보면・・・

빨갛게 된 것이 하얗게 되어 버렸다! 어째서 야네.
컨트롤러에는 다음의 설명.
reviews_controller.rb
  def create
    @review = Review.new(review_params)
    if @review.save
      redirect_to party_path(@review.party), dark: 'レビューの投稿ができました'
    else
      @party = Party.find(params[:party_id])
      @reviews = @party.reviews.includes(:user)
      flash[:danger] = 'レビューの投稿ができませんでした'
      render "parties/show"
    end
  end
app/helpers/devise_helper.rb 로 정의한 안에 dark나 danger가 없기 때문이라고 깨달았다.dark나 danger가 되도록, "notice"와 "error"로 재작성하면 좋을까?
reviews_controller.rb
  def create
    @review = Review.new(review_params)
    if @review.save
      redirect_to party_path(@review.party), notice: 'レビューの投稿ができました'  ⬅️変更
    else
      @party = Party.find(params[:party_id])
      @reviews = @party.reviews.includes(:user)
      flash[:error] = 'レビューの投稿ができませんでした'  ⬅️変更
      render "parties/show"
    end
  end
이것으로 OK!
이어 edit 액션, update 액션, destroy 액션에도 flash 메시지를 설정했기 때문에 그 쪽도 변경.
그러면 여기서 문제가 발생.
edit 액션, destroy 액션 플래시 메시지가 이상합니다.
reviews_controller.rb
  def edit
    unless current_user.id == @review.user_id
      redirect_to root_path, error: '無効なURLです'  ⬅️ここを変更した
    end
  end
  def destroy
    @review.destroy
    redirect_to party_path(@review.party), error: 'レビューの削除ができました'  ⬅️ここを変更した
  end
같은 설명 방법으로 하고 있는데 왜 메시지가 표시되지 않는다.
무엇이 좋지 않을지 잘 모르겠지만, 설명을 변경하면 표시되었다.
reviews_controller.rb
  def edit
    unless current_user.id == @review.user_id
      redirect_to root_path
      flash[:error] = '無効なURLです'
    end
  end
  def destroy
    @review.destroy
    redirect_to party_path(@review.party)
    flash[:error] = 'レビューの削除ができました'
  end
오류
error: 'レビューの削除ができました'오 K
flash[:error] = 'レビューの削除ができました'무엇이 다른가?
flash를 넣지 않으면 읽어 주지 않았다면 create 액션 쪽으로 읽혀지는 것이 이상하다.
같은
redirect_to 를 사용하고 있고 원인은 다른 곳에 있을지도 모른다.우선 이상적인 표시가 되었다.
원인을 아는 분이 계시면 코멘트 등 받을 수 있으면 다행입니다.
참고로했습니다.
@ 후지 모리 치히로 님
devise flash 메시지에 bootstrap 경고 적용
고마워요.
추가 2/17
edit 액션도 destroy 액션도
alert: '無効なURLです''이 쓰는 방법으로 갈 수 있었다.여러가지 시도했지만, 아무래도
error:가 잘 표시되지 않는 것 같다.서버 재부팅 다시 시작하는 초보적인 녀석일까 하고 생각해 보았지만 효과는 없다.
error:는 좋지 않지만 alert:는 OK라는 것을 잘 모른다.깊어지는 수수께끼.
reviews_controller.rb
  def edit
    unless current_user.id == @review.user_id
      redirect_to root_path, alert: '無効なURLです'  ⬅️これでOK
    end
  end
    def destroy
    @review.destroy
    redirect_to party_path(@review.party), error: 'レビューの削除ができました'  ⬅️error:は表示されない
  end
Reference
이 문제에 관하여(【devise】 디폴트 맛없는 flash 메시지에 Bootstrap을 적용 ~ 미해결 수수께끼가 하나 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bon_eng/items/bc6cc738956a6b947759텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)