【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.)