노래하듯 이야기하고, 춤추듯 정복하라.

[Ruby & Rails] Rails의 View helper 본문

프로그래밍/Ruby & Rails

[Ruby & Rails] Rails의 View helper

hyeoke 2018. 7. 5. 20:24

#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? %>


Comments