Rails 1.2 RC1의 ActionPack에 새로 추가된 기능들

Rails 1.2 RC1의 ActiveRecord에 새로 추가된 기능들에 이어 오늘은 Rails 코딩에 즐거움을 주는 Action Pack에 새로 추가된 기능들을 알아보겠습니다.

1. Views

HTML 테그 하위 속성

RJS코딩에서 이제 하위 속성을 쉽게 변경할 수 있습니다.
page['foo']['style']['color'] = 'red' # => $('foo').style.color = 'red';
에서 보듯이 foo라는 id를 지닌 HTML 엘리멘트의 color 속성을 빨간색으로 지정하는 방법입니다. (음.. 개인적으로는 그냥 JS로 표기한 오른쪽이 더 간단해 보입니다만...)

end_form_tag여 안녕
이제
<% form_tag(products_url) do %>
  <%= text_field :product, :title %>
  <%= submit_tag "Save" %>
<% end -%>
와 같이 사용합니다. 사실 </form> 대신 <%= end_form_tag %>라고 사용하는 것이 번거롭다고 생각했지만 직접 </form>을 쓰기는 아름답지 않았었는데, 블록을 사용하는 방법을 통해 깔끔하게 정리되었습니다. Agile Web Development with Rails 2판에서도 form 코딩부분이 모두 저런 스타일로 변경되었더군요.

distance_of_time_in_words
프로젝트 홈디렉토리에서 ruby ./script/console를 입력하시면 콘솔이 뜹니다. 여기서 다음과 같이 해보세요.
>> helper.distance_of_time_in_words(50)
=> "less than a minute"
이제 1.2에서는 몇 년, 몇 개월인지가 추가되었습니다.

사실 korean_rails 플러그인을 쓰신다면 1.1.6에서도 사용 가능한 기능이었습니다. :)
>> helper.distance_of_time_in_words(10)
=> "1분 이내"
>> helper.distance_of_time_in_words(1000)
=> "16분"
>> helper.distance_of_time_in_words(1000000)
=> "11일"
>> helper.distance_of_time_in_words(100000000)
=> "3년"
2. Controllers

Exception Raise

이 제 예외가 발생하면 RAILS_ROOT/public/500.html 페이지를 보여줍니다. "Application error (Rails)" 라면서 성의없이 보이는 것이 마음에 걸려졌던 분들은 이제 public/500.html을 이쁘게 꾸미시면 좋을 것 같습니다.

head 메소드
body내용 없이 해더만 보내고 싶은 경우 다음과 같이 쓸 수 있다고 하네요.
head :status => 404 # return an empty response with a 404 status
head :location => person_path(@person), :status => 201
템플릿 파일 확장자 지정
이제는
ActionController::Base.exempt_from_layout 'rpdf'
와 같은 방식을 통해 view로 사용할 템플릿의 확장자를 추가할 수 있다고 합니다. 플러그인 만드실때 유용하시겠습니다. 지금은 rhtml, rxml, rjs 등의 파일을 사용하고 있었지요.

Content type
RESTful resources를 사용할 경우 다음과 같이 다양한 포멧으로 view를 출력할 수 있는데요,
class WeblogController < ActionController::Base
  def index
    @posts = Post.find :all
    respond_to do |format|
      format.html
      format.xml { render :xml => @posts.to_xml }
      format.rss { render :action => "feed.rxml" }
    end
  end
params[:format]의 내용을 content type으로 지정하는 원리입니다.
RESTfull cheat sheet도 한번 살펴보세요.

MIME type
위의 기능과 맡물려서 MIME type을 사용자가 지정할 수 있습니다.
Mime::Type.register(string, symbol, synonyms = [])
Mime::Type.register("image/gif", :gif)
요렇게 말이지요.

로그에 암호 남기지 않기
filter_parameter_logging 'password' # Don't log fields that match 'password'
이렇게 컨트롤러에 지정해서 특정 field에 대한 정보를 로그에 안남길 수도 있습니다.


3. URL 라우팅

Rails의 매력만점 URL라우팅 부분의 코드가 새롭가 다시 만들어졌다고 합니다. 더 빠르게 작동하는 것은 물론이고
class MyMailer < ActionMailer::Base

  include ActionController::UrlWriter
  default_url_options[:host] = 'my_site.com'
이렇게 ActionMailer에서도 응용할 수 있다고 하는데, 저는 ActionMailer는 안써봐서 잘 모르겠습니다. :)


4. Testing

테스트 기능을 많이 쓰고 계신지요? assert 메소드 중 유용한 메소드가 더 추가되었군요.
assert_response :success # You know this one
assert_response :ok
assert_response :not_found
assert_response :forbidden
를 참고하시고, CSS에 대한 테스트를 할 수 있는 assert_select도
assert_select "a[href=http://assert_select_rules.com]", @item.url, "Should have a link"
assert_select "div#products", nil, "Should show a products div on the page"
와 같이 추가된 기능을 확인하세요. assert_select에 관해서는 cheat sheet도 참고하세요.


5. 이제 이것들은 잊으세요~ 시리즈

다음과 같은 변경사항을 숙지하세요.
  • assert_tag는 이제 assert_select로 씁니다.
  • start_form_tag와 end_form_tag는 form_tag do ~~ end 로 사용합니다.
  • @cookies, @headers, @request, @response, @params, @session, @flash에서 @를 때고 cookies, headers, request, response, params, session, flash로 사용합니다.
  • image_tag에서 이미지 파일의 확장자를 지정하지 않으면 자동으로 .png를 붙여주는 것을 이제는 더이상 하지 않습니다. (개인적으로 이게 왜 기본기능인지 이해가 안되었지요. ㅎ)

휴~ 모두들 즐거운 새 기능과 놀아봅시다~


목차
  1. Rails 1.2 RC1의 ActiveRecord에 새로 추가된 기능들
  2. Rails 1.2 RC1의 ActionPack에 새로 추가된 기능들
  3. Rails 1.2 RC1의 ActiveSupport에 새로 추가된 기능들
by 정목 | 2006/11/30 12:14 | Ruby & Rails | 트랙백 | 덧글(2)
트랙백 주소 : http://niceview.egloos.com/tb/2847578
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 찬식 at 2007/02/25 21:25
안녕하세요. 검색 하다가 여기까지 와서 모르던 사실을 알고 갑니다. ^^

예전 레일즈 문서로 공부하다 보니 start_form_tag 부분에서 넘어가지 않아서

검색하니까 이 글이 바로 나오네요.

간신히 에러를 넘어갈 수 있었습니다. 감사합니다. ^^
Commented by 정목 at 2007/02/25 22:08
^-^ 네 이제 form_for do |f| ... end 와 같은 양식으로 사용하세요

:         :

:

비공개 덧글