티스토리 뷰

Ruby on rails - 컨트롤러에서 flash로 alert 해주기


> 실습에 앞서

rails를 사용하다 보면 컨트롤러에서 특정 액션 수행시 조건에 따라, alert를 주는 효과를 적용하고 싶을때가 있습니다. 필자 같은 경우는, 팀 스터디방에서 다른 팀일 경우, 이를 체크해 alert해주는 기능을 적용시키기 위해 사용했습니다.


이는 flash라는 것을 통해 가능한데, 어떤 것인지 보시면  페이지에 한 영역을 차지해 메시지를 띄워주는 기능입니다.


>flash?

:레일스에서는 컨트롤러의 액션 실행시 발생하는 액티브레코드 관련 각종 메시지를 flash라는 세션의 특수한 형태를 통해서 표시할 수 있다고합니다. 카메라의 플래시를 연상해 보면 알 수 있듯이 메시지를 짧은 시간만 저장할 수 있으며 레일스 내부적으로는 FlashHash 클래스의 인스턴스입니다. 즉, 액션 간에 임시로 객체를 전달할 수 있는 수단으로 생각할 수 있습니다. 따라서 flash 객체에 어떤 것이라도 지정할 수 있고 바로 다음번 액션에서만 사용되고 사라지게 되는것이죠.

https://rorlab.gitbooks.io/railsguidebook/content/contents/walkthrough/flash_message.html 참고

     | flash 예시


> 실습

#posts_controller.rb
 def new
   ----------------추가된 부분-------------------------------
   #팀 체크해서 alert 해줌 (같은팀만 글작성할 수 있게)
   if params[:teamid] != current_user.team_id
     flash[:alert] = "#{params[:teamid]}팀만 이 스터디방에 글을 작성할 수있습니다!"
     redirect_back(fallback_location: root_path)
   end
   -------------------------------------------------
   @post = Post.new
 end

저는위와 같이 post 컨트롤러의 new action에서 url 에서 teamid 파라미터를 가져와 현재 접속한 유저의 팀아이디와 비교해서 flash 메시지를 넣어줘서 redirect 해주었습니다. 필요하신 조건에 따라 알맞게 if문안의 조건문을 바꿔주면 됩니다.

#posts/index.html.erb

<% if flash[:alert] %>
<div class="alert alert-danger"><%= flash[:alert] %></div>
<% end %>

그리고 flash를 보여줄 곳에 가서 위와 같은 코드를 넣어주면 됩니다. alert alert-danger 클래스를 적용시켜주었는데, 클래스에 따라 아래와 같은 다른 색의 메시지를 보여줄수 있게 됩니다. 저는 같은팀이 아닐시 글을 등록할수 없다는 메시지를 보여주려 했으므로 danger 클래스를 이용했습니다.https://www.w3schools.com/bootstrap/bootstrap_alerts.asp 참고

> 적용 예시


| 마치며

위와 같은 기능을 게시판을 구성하거나 할때, 많이 필요할 수 있는 기능이므로, 숙지해두면 좋을것입니다 :)


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함