[Ruby & Rails] Rails의 View helper
#Rails만 갖고 있는 view helper
레일즈의 view 파일들은 기본적으로 viewfile_name.html.erb 형태의 파일 포맷을 가진다. 뷰 템플릿 파일의 양이 많아질수록 html과 erb의 코드가 복잡해져서 유지보수와 디버깅이 어려워진다. 이러한 문제점을 해결하기 위해 레일즈에서는 그들만의 view_helper 메소드 들을 제공하고 있다. 레일즈의 view helper을 사용하면 템플릿파일이 비교적 깔끔해 지는 것을 느낄 수 있을 것이다.
<%= link_to 'Edit', edit_post_path(@post) %>
위와 같은 코드가 대표적인 예인데, 로컬 서버를 실행하여 개발자도구(f12)를 실행하고 위치를 찍어보면 다음과 같은 코드로 변환되어 보인다.
<la href="/posts/17/edit">Edit</a>
전 글에서 포스팅 했던 form_for역시 뷰의 헬퍼 중의 하나이다.
#View Helper의 종류
레일즈의 view helper는 문자열이나 숫자를 다루는 헬퍼, 외부 리소스 지정을 위한 뷰 헬퍼, 사용자가 직접 정의하는 사용자 정의 헬퍼 등 다양하게 존재한다. 이 때문에 개발자의 뷰 파일의 복잡도를 완화시키고, 유지보수도 간편하게 할 수 있는 것 같다.
이 포스팅에서 모든 헬퍼들을 다루기엔 방대하므로, 위에서 언급한 링크 관련 뷰헬퍼들에 대해 간단히 알아보자면,
- 하이퍼링크 생성 : link_to(body, url [, html_opt])
- body: 링크 텍스트
- url: 링크 대상
- html_opt: 동작 옵션
- 라우트 정의로 동적 url 생성 : url_for(opts)
- opts: url 생성 옵션
- 아래에서의 action은 edit나 destroy, new 등의 액션을 뜻하는 것 같다.
<%= url_for(action: :new) %>
- 조건에 따라 링크 생성 : link_to_if(condition, name [,url [,html_opt]], &block)
- 개인적으로 유용하다고 생각하는 헬퍼
- if user_signed_in과 같은 조건식을 추가하는 것을 생략해 줄 수 있지 않을까?
<%= link_to_if @user.nil?, '로그인', controller: :login, action: :index %>
#추가
- devise의 user 모델 헬퍼: 현재 사용자가 로그인 되어 있는지 여부를 물어본다.
<%= if user_signed_in? %>