Rails 3.1 Overview

 
아시다시피 5월 5일 Rails 3.1 Beta 1 이 Release되었다.
많은것들이 바뀌었는데 그것들중 알고 넘어가면 좋을법한것 몇가지만 추려 간략하게 Overview해보았다.

설치

rvm 1.9.2@railspre –create
gem install rails –pre

 

Javascript

Rails 3.1부터 prototype.js가 아닌 jQuery와 CoffeeScript가  Default로 탑재되어 있다.
만약 jQuery가 아닌 prototype.js를 계속 사용하고자 할 경우,

rails new [APP_NAME] -j prototype

해주면 된다.

새로 추가된 Gems

  • sass: haml에 포함되어 있던 sass가 독립되어 나왔다.
  • coffee-script
  • uglifier: JS를 하나의 파일로 합쳐준다.
  • jquery-rails

 

디렉토리 구조 변경

Public아래에 있던 Javascript, Stylesheets, Images가
/app/assets/ 로 이동되었다.
그러므로 웹엔진(Nginx등)에서 Js, Css, Image를 Rails한테 안넘기고 직접 처리하도록 세팅이 되어 있었다면, 관련 부분은 수정이 있어야 한다

Sprockets

application.css, application.js에 보면

 //= require jquery

처럼 주석처리된 require들이 있는데, 이건 주석이 아니라 sprockets의 require(include)하는 문법이므로 해당 구문을 삭제하면 include가 안된다.

Migration

migration file의 change 메소드가 추가되었다.
과거에는 up, down으로 메소드가 분리되어 있었지만, change로 통합되었다.
하지만 종종 제대로 동작하지 않을때도 있는데 그럴땐 up, down을 만들어서 사용하면 된다.

그리고 :belongs_to가 추가되었는데, 과거 relationship을 같게 될 경우 직접 index key(article_id:integer)를 만들어 줬었다.
3.1 에서는 belongs_to를 이용하면 되는데.

rails g scaffold comment article:belongs_to body:text

이렇게 써주면되며, belongs_to로 만들면 add_index도 시켜준다.

Console

콘솔에서 DB Query가 노출이 되었는데.. 상황에 따라선 이게 과잉친절이 될 수 도 있을 듯 하다.

Active Record

  • :has_many에서 :through를 다중깊이까지 사용할 수 있게 되었다.
  • 그리고 :through에서 :dependent 도 지원을 한다.
  • :as 가 추가되었다.
  • default_scope가 block으로 처리할 수 잇게 되었으며 lambda, method를 사용할 수 있다.

    default_scope { … }
    default_scope lambda { … }
    default_scope method(:foo)

  • update_column이 추가되었는데, update_attribute와 동작은 유사하지만 validation과 callback을 무시하고 update한다.

    User.first.update_column(:name, “sebastian”)

  • inverse_of가 추가되어서 예제 코드처럼 post.tags.build가 가능하다.
     

    class Post < ActiveRecord::Base
    has_many :taggings
    has_many :tags, :through => :taggings
    end

    class Tagging < ActiveRecord::Base
    belongs_to :post
    belongs_to :tag, :inverse_of => :tagging # :inverse_of must be set!
    end

    class Tag < ActiveRecord::Base
    has_many :taggings
    has_many :posts, :through => :taggings
    end

    post = Post.first
    tag = post.tags.build :name => “ruby”
    tag.save # will save a Taggable linking to the post

     

  • has_many의 :conditions에서 sql을 직접 쓰는것의 사용법이 바뀌었다.
    // Before
    has_many :things, :conditions => ‘foo = #{bar}’

    // After
    has_many :things, :conditions => proc { “foo = #{bar}” }

  • has_secure_password라는 메소드가 추가가 되었는데, Authentication을 직접 만들어서 쓸 경우 아주 유용하게 사용할 수 있다.
    새삼스럽지만, 3.1되면서 부터 Authentication Tool은 안써도 될 듯 하다.

 

Action Pack

 

  • auto_link가 제거되었다. 만약 계속 사용할것이라면 rails_autolink gem을 이용하면 된다.
  • :authenticity_token 을 form_tag에서 option으로 바뀌었다. 생략하거나 수정이 가능하다.
  • rhtml, rxml이 제거되었다.
  • csft_meta_tag가 복수로 rename되었다. csft_meta_tags
  • HTML5의 “data” attribute를 hash로 제공한다
    tag(“div”, :data => {:name => ‘Johan Kim’, :city_state => %w(Seoul)})

 

Active Support

 

  • Object#in?
  • weeks_ago
  • pre_week

간략하게 이 정도 인 것 같다.
관심이 있다면 https://gist.github.com/958283 를 확인하면 자세한 내역이 나온다.

http://menonrails.com/articles/14 에 기고된 포스팅 입니다.

참고링크

 

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중