티스토리 뷰
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 %>| 마치며
위와 같은 기능을 게시판을 구성하거나 할때, 많이 필요할 수 있는 기능이므로, 숙지해두면 좋을것입니다 :)
'Back end > Ruby on rails' 카테고리의 다른 글
| Ruby on rails - 유저 프로필 등록하기 (0) | 2018.03.14 |
|---|---|
| Ruby on rails-멋사 중앙대 웹사이트 만들기 (0) | 2018.03.06 |
| Ruby on rails - 좋아요 기능 만들기 (0) | 2018.03.05 |
| Ruby on rails - appplication.js가 적용되지 않을때 (0) | 2018.03.01 |
| Ruby on rails - 구글 계정 연동 로그인 구현하기 (0) | 2018.02.26 |