Seongsiks

Being A DevOpser. Powered by
Obtvse, highlight.js, theme toc Creative Commons License
Seongsiks Twitter Github Email
DevOps Ruby On Rails Chef Projects Misc Movies & Drama ME

Rails4-5 View

Overview

요번에는 Rails를 처음으로 접할때 정말 매직 같다고 느꼈던 ActionView입니다. Rails4에서는 어떤 것들이 새로워 졌는지 확인해봅시다~

Collection Form Helpers

  • Owner has_many :items
  • Item belongs_to :owner

이럴때 view에서

collection_select(:item, :owner_id, Owner.all, :id, :name)

이 코드는 실제 뷰에서 다음과 같이 렌더됩니다.

<select name="item[owner_id]">
  <option value="1">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>

파라미터의 순서나 개수가 많아서 외워야하는게 좀 있지만.. 그래도 이 정도면 쓸만하죠? 자... 그런데 Radio button이나 checkbox는 어떻게 하셨나요?? 이렇게요?

<% @owners.each do |owner| %>
  <% radio_button_tag :owner_id, owner.id %>
  <% owner.id %>
<% end %>

자 이제 Rails4에서는 collection_select사용하시던 것처럼

collection_radio_buttons(:item, :owner_id, Owner.all, :id, :name )
collection_check_boxes(:item, :owner_id, Owner.all, :id, :name )

요로케만 하시면 됩니다.

Date

지금까지 Data select form을 어떻게 만드셨나요? 저는 form helper의 #date_select가 너무 안좋아서 그냥 [jqueryui의 datapicker]를 사용했습니다.

그래서 Rails4에서 새로 추가된 form helper 메소드

<%= f.date_field :return_date %>

이렇게 한줄이면 이쁜 date picker와 하나짜리 입력테그가 생성됩니다. 물론 html5를 지원하는 브라우져를 사용하는 유져에게만요.. 그래서 아직 저는 Datepicker를 씁니다.

 <input id="item_return_date" name="item[return_date] type="date" >

Ruby Template Handler

컨트롤러에 다음과 같은 코드가 있다고 한다면

def index
  @owners = Owner.all
  respond_to do |format|
    format.json { render json: @owners }
  end
end

response는 당연히 다음과 같이 나오겠죠..

[ 
  {"owner":{"id":1, "name":"Slow-slow", "created_at"... }}, 
  {"owner":{"id":2, "name":"quick", "created_at"... }}, 
  {"owner":{"id":3, "name":"fast-fast", "created_at"... }}
]

그런데 과연 실제로 created_at같은 필드가 쓸모가 있는 필드일까요? 이런 필요없는 필드가 섞여 있을때 json response를 커스터마이징 시켜 보도록 하겠습니다.

Jbuilder template Handler

# File name : views/owners/index.json.jbuilder
json.array!(@owners) do |owner|
  json.extract! owner, :name
  json.url owner_url(owner)
end

이 방법으로 jbuilder API을 이용해서 id와 name필드만을 가지고 있는 json response를 만들 수 있습니다. 여기까지는 Rails3나 Rails4나 똑같습니다.

Rails4 에서는 여기다가 하나의 템플릿이 추가 되었는데 바로 Ruby Template Handler입니다. 바로 템플릿에서 pure ruby 코드를 사용할 수 있습니다. 단순히 파일명에 .ruby라고 붙여주기만 하면 됩니다.

# File name : views/owners/index.json.ruby
owners_hashes = @owners.map do |owner|
  { name: owner.name, url: owner_url(owner) }
end
owners_hashes.to_json

View에서는 크게 달라진것이 없네요. 현 시점에서 전체적인 이번 Rails 4.0 업데이트의 중점은 맨날 성능가지고 맨날 뭐라 그러는데, 우리도 개선했어!!와 각종 불합리했던 부분의 합리화로 요약되는 느낌입니다. 그런데 아직 성능에 대해선 한마디도 안나왔네요?


[이전 Rails4 - 4 Strong Parameters, Authenticity Token, Filters, Sessions, Flash]
[다음 Rails4-6 Etags n Cache]
comments powered by Disqus
Back to Ruby On Rails