Ruby on Rails 3.1 릴리스 노트
Rails 3.1의 주요 변경 사항:
- 스트리밍
- 가역적 마이그레이션
- 애셋 파이프라인
- jQuery를 기본 JavaScript 라이브러리로 사용
이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 메인 저장소에서 커밋 목록을 확인하세요.
Rails 3.1로 업그레이드하기
기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 3로 먼저 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 3.1로 업데이트해야 합니다. 그리고 다음과 같은 변경 사항에 유의하세요:
Rails 3.1에는 최소 Ruby 1.8.7이 필요합니다
Rails 3.1에는 Ruby 1.8.7 이상이 필요합니다. 이전 버전의 Ruby에 대한 지원이 공식적으로 중단되었으므로 가능한 빨리 업그레이드해야 합니다. Rails 3.1은 Ruby 1.9.2와도 호환됩니다.
팁: Ruby 1.8.7 p248 및 p249에는 마샬링 버그가 있어 Rails가 충돌할 수 있습니다. 그러나 Ruby Enterprise Edition 1.8.7-2010.02 이상 버전에서는 이 문제가 해결되었습니다. 1.9.x 버전의 경우 Ruby 1.9.1은 세그먼테이션 오류가 발생하므로, 1.9.2를 사용하는 것이 안정적입니다.
애플리케이션에서 업데이트해야 할 사항
다음 변경 사항은 애플리케이션을 Rails 3.1.3, 즉 최신 3.1.x 버전의 Rails로 업그레이드하기 위한 것입니다.
Gemfile
Gemfile
에 다음과 같은 변경 사항을 적용하세요.
gem "rails", "= 3.1.3" gem "mysql2" # 새로운 애셋 파이프라인에 필요함 group :assets do gem "sass-rails", "~> 3.1.5" gem "coffee-rails", "~> 3.1.1" gem "uglifier", ">= 1.0.3" end # Rails 3.1에서 jQuery가 기본 JavaScript 라이브러리 gem "jquery-rails"
config/application.rb
애셋 파이프라인을 사용하려면 다음 내용을 추가해야 합니다:
config.assets.enabled = true config.assets.version = '1.0'
애플리케이션에서 “/assets” 경로를 리소스로 사용하는 경우 충돌을 방지하기 위해 애셋 접두사를 변경할 수 있습니다:
# 기본값은 '/assets' config.assets.prefix = '/asset-files'
config/environments/development.rb
config.action_view.debug_rjs = true
설정을 제거합니다.애셋 파이프라인을 사용하는 경우 다음 내용을 추가합니다.
# 애셋 압축하지 않음 config.assets.compress = false # 로드된 애셋 라인 확장 config.assets.debug = true
config/environments/production.rb
아래 대부분의 변경 사항은 애셋 파이프라인과 관련됩니다. 자세한 내용은 애셋 파이프라인 가이드를 참조하세요.
# JavaScript와 CSS 압축 config.assets.compress = true # 사전 컴파일된 애셋이 누락된 경우 애셋 파이프라인으로 대체하지 않음 config.assets.compile = false # 애셋 URL에 다이제스트 생성 config.assets.digest = true # 기본값은 Rails.root.join("public/assets") # config.assets.manifest = YOUR_PATH # 추가로 컴파일할 애셋 (application.js, application.css, 그 외 JS/CSS는 이미 추가됨) # config.assets.precompile `= %w( admin.js admin.css ) # 모든 접근을 SSL로 강제하고, Strict-Transport-Security와 안전한 쿠키 사용 # config.force_ssl = true
config/environments/test.rb
# 테스트에서 정적 애셋 서버 구성, 성능을 위해 Cache-Control 사용 config.serve_static_assets = true config.static_cache_control = "public, max-age=3600"
config/initializers/wrap_parameters.rb
매개변수를 중첩 해시로 래핑하려면 이 파일을 추가하고 다음 내용을 입력합니다. 새 애플리케이션에서는 기본적으로 활성화되어 있습니다.
# 서버 재시작 시 이 파일을 수정해야 합니다. # 이 파일에는 기본적으로 활성화된 ActionController::ParamsWrapper에 대한 설정이 포함되어 있습니다. # JSON 형식의 매개변수 래핑을 활성화합니다. 비활성화하려면 :format을 빈 배열로 설정하세요. ActiveSupport.on_load(:action_controller) do wrap_parameters :format => [:json] end # Active Record에서 JSON 응답의 루트 요소를 비활성화합니다. ActiveSupport.on_load(:active_record) do self.include_root_in_json = false end
뷰에서 애셋 헬퍼의 :cache와 :concat 옵션 제거
- 애셋 파이프라인에서는 :cache와 :concat 옵션이 더 이상 사용되지 않으므로, 뷰에서 이 옵션을 삭제하세요.
Rails 3.1 애플리케이션 생성하기
# 'rails' RubyGem이 설치되어 있어야 합니다 $ rails new myapp $ cd myapp
젬 벤더링
Rails는 이제 애플리케이션 루트의 Gemfile
을 사용하여 애플리케이션에 필요한 젬을 결정합니다. 이 Gemfile
은 Bundler 젬에 의해 처리되며, 모든 종속성을 설치합니다. 시스템 젬에 의존하지 않고 애플리케이션 내부에 종속성을 설치할 수도 있습니다.
자세한 내용: - Bundler 홈페이지
엣지 버전 사용하기
Bundler
와 Gemfile
을 사용하면 새로운 bundle
명령으로 Rails 애플리케이션을 쉽게 동결할 수 있습니다. Git 저장소에서 직접 번들링하려면 --edge
플래그를 사용하세요:
$ rails new myapp --edge
로컬에 Rails 저장소가 있고 그것을 사용하여 애플리케이션을 생성하려면 --dev
플래그를 사용하세요:
$ ruby /path/to/rails/railties/bin/rails new myapp --dev
Rails 아키텍처 변경 사항
애셋 파이프라인
Rails 3.1의 주요 변경 사항은 애셋 파이프라인입니다. 이를 통해 CSS와 JavaScript를 코드의 일부로 취급할 수 있으며, 플러그인과 엔진에서도 사용할 수 있습니다.
애셋 파이프라인은 Sprockets로 구동되며, 애셋 파이프라인 가이드에서 자세히 다룹니다.
HTTP 스트리밍
Rails 3.1에서 새로 도입된 HTTP 스트리밍은 서버가 응답을 생성하는 동안 브라우저가 스타일시트와 JavaScript 파일을 다운로드할 수 있게 해줍니다. 이 기능은 Ruby 1.9.2를 요구하며, 옵트인 방식이며 웹 서버의 지원도 필요합니다. 그러나 NGINX와 Unicorn의 조합은 이 기능을 활용할 수 있습니다.
기본 JavaScript 라이브러리는 jQuery
Rails 3.1에서는 jQuery가 기본 JavaScript 라이브러리가 되었습니다. 그러나 Prototype을 사용하는 경우 간단히 전환할 수 있습니다.
$ rails new myapp -j prototype
아이덴티티 맵
Active Record에 Rails 3.1에서 아이덴티티 맵이 추가되었습니다. 아이덴티티 맵은 이전에 인스턴스화된 레코드를 유지하고, 다시 액세스할 때 해당 객체를 반환합니다. 아이덴티티 맵은 요청 단위로 생성되며, 요청 완료 시 플러시됩니다.
Rails 3.1에서는 아이덴티티 맵이 기본적으로 비활성화되어 있습니다.
Railties
jQuery가 새로운 기본 JavaScript 라이브러리가 되었습니다.
jQuery와 Prototype은 더 이상 내장되지 않으며,
jquery-rails
와prototype-rails
젬을 통해 제공됩니다.애플리케이션 생성기는
-j
옵션을 받으며, 임의의 문자열을 사용할 수 있습니다. “foo"를 전달하면 "foo-rails” 젬이Gemfile
에 추가되고, 애플리케이션 JavaScript 매니페스트에서 “foo"와 "foo_ujs"를 요구합니다. 현재 "prototype-rails"와 "jquery-rails"만 존재하며 애셋 파이프라인을 통해 해당 파일을 제공합니다.애플리케이션이나 플러그인을 생성하면
bundle install
이 실행됩니다. 단,--skip-gemfile
또는--skip-bundle
옵션을 지정하면 제외됩니다.컨트롤러와 리소스 생성기는 이제 자동으로 애셋 스텁을 생성합니다(–skip-assets 옵션으로 비활성화할 수 있음). 이 스텁은 CoffeeScript와 Sass를 사용합니다.
스캐폴드와 앱 생성기는 Ruby 1.9 스타일 해시를 사용합니다. 이전 스타일의 해시를 생성하려면
--old-style-hash
옵션을 전달할 수 있습니다.스캐폴드 컨트롤러 생성기는 XML 대신 JSON 형식의 블록을 생성합니다.
Active Record 로깅이 STDOUT으로 전송되며 콘솔에 인라인으로 표시됩니다.
config.force_ssl
구성을 추가하여Rack::SSL
미들웨어를 로드하고 모든 요청을 HTTPS 프로토콜로 강제할 수 있습니다.rails plugin new
명령을 추가하여 젬 사양, 테스트, 테스트용 더미 애플리케이션이 포함된 Rails 플러그인을 생성할 수 있습니다.Rack::Etag
와Rack::ConditionalGet
이 기본 미들웨어 스택에 추가되었습니다.Rack::Cache
가 기본 미들웨어 스택에 추가되었습니다.엔진이 크게 업데이트되었습니다 - 어떤 경로에서든 마운트할 수 있고, 애셋을 활성화하고, 생성기를 실행할 수 있습니다.
Action Pack
Action Controller
CSRF 토큰 인증을 확인할 수 없는 경우 경고가 발생합니다.
특정 컨트롤러에서
force_ssl
을 지정하면 브라우저가 해당 컨트롤러의 데이터를 HTTPS 프로네, 번역을 계속하겠습니다.
Action Pack
Action Controller
특정 컨트롤러에서
force_ssl
을 지정하면 브라우저가 해당 컨트롤러의 데이터를 HTTPS 프로토콜로 전송하도록 강제됩니다. 특정 액션에만 적용하려면:only
또는:except
옵션을 사용할 수 있습니다.config.filter_parameters
에 지정된 민감한 쿼리 문자열 매개변수가 이제 로그에서 필터링됩니다.to_param
이nil
을 반환하는 URL 매개변수는 이제 쿼리 문자열에서 제거됩니다.ActionController::ParamsWrapper
를 추가하여 매개변수를 중첩 해시로 래핑할 수 있으며, 새 애플리케이션에서 JSON 요청에 대해 기본적으로 활성화됩니다. 이는config/initializers/wrap_parameters.rb
에서 사용자 정의할 수 있습니다.config.action_controller.include_all_helpers
를 추가했습니다. 기본적으로ActionController::Base
에서helper :all
이 수행되어 모든 헬퍼가 포함됩니다.include_all_helpers
를false
로 설정하면 applicationhelper와 해당 컨트롤러의 헬퍼(예: foohelper for foo_controller)만 포함됩니다.url_for
및 명명된 URL 헬퍼에:subdomain
및:domain
옵션이 추가되었습니다.Base.http_basic_authenticate_with
를 추가하여 단일 클래스 메서드 호출로 간단한 HTTP 기본 인증을 수행할 수 있습니다.class PostsController < ApplicationController USER_NAME, PASSWORD = "dhh", "secret" before_filter :authenticate, :except => [ :index ] def index render :text => "Everyone can see me!" end def edit render :text => "I'm only accessible if you know the password" end private def authenticate authenticate_or_request_with_http_basic do |user_name, password| user_name == USER_NAME && password == PASSWORD end end end
이를 다음과 같이 작성할 수 있습니다:
class PostsController < ApplicationController http_basic_authenticate_with :name => "dhh", :password => "secret", :except => :index def index render :text => "Everyone can see me!" end def edit render :text => "I'm only accessible if you know the password" end end
스트리밍 지원이 추가되었습니다. 다음과 같이 활성화할 수 있습니다:
class PostsController < ActionController::Base stream end
:only
또는:except
를 사용하여 일부 액션에만 제한할 수 있습니다. 자세한 내용은ActionController::Streaming
문서를 참조하세요.리디렉션 경로 메서드에 URL의 일부만 변경하는 옵션 해시나 호출 가능한 객체를 전달할 수 있어, 리디렉션을 재사용할 수 있습니다.
Action Dispatch
config.action_dispatch.x_sendfile_header
의 기본값이nil
로 변경되었으며,config/environments/production.rb
에서 특정 값을 설정하지 않습니다. 이를 통해 서버에서X-Sendfile-Type
을 설정할 수 있습니다.ActionDispatch::MiddlewareStack
이 상속 대신 구성을 사용하도록 변경되었으며, 더 이상 배열이 아닙니다.ActionDispatch::Request.ignore_accept_header
를 추가하여 accept 헤더를 무시할 수 있습니다.기본 스택에
Rack::Cache
가 추가되었습니다.etag 책임이
ActionDispatch::Response
에서 미들웨어 스택으로 이동했습니다.Rack::Session
저장소 API를 사용하도록 변경되어 Ruby 세계의 더 많은 호환성을 제공합니다. 이는 역호환되지 않는데,Rack::Session
은#get_session
이 4개의 인수를 받고#destroy_session
대신#destroy
를 요구하기 때문입니다.템플릿 조회 순서가 상속 체인을 따르도록 변경되었습니다.
Action View
form_tag
에:authenticity_token
옵션을 추가하여 토큰을 사용자 정의하거나:authenticity_token => false
로 토큰을 생략할 수 있습니다.ActionView::Renderer
를 생성하고ActionView::Context
의 API를 지정했습니다.SafeBuffer
의 제자리 변경이 Rails 3.1에서 금지되었습니다.HTML5
button_tag
헬퍼를 추가했습니다.file_field
가 자동으로 포함 폼에:multipart => true
를 추가합니다.태그 헬퍼에서
:data
옵션 해시의 데이터-* 속성을 생성하는 편의 기능을 추가했습니다:tag("div", :data => {:name => 'Stephen', :city_state => %w(Chicago IL)}) # => <div data-name="Stephen" data-city-state="["Chicago","IL"]" />
키는 대시로 구분되며, 값은 문자열과 기호의 경우 그대로, 그 외에는 JSON으로 인코딩됩니다.
csrf_meta_tag
가csrf_meta_tags
로 이름이 변경되었으며, 이전 이름에 대한 별칭이 제공됩니다.이전 템플릿 핸들러 API가 deprecate되었으며, 새 API는 템플릿 핸들러가
call
에 응답하기만 하면 됩니다.rhtml과 rxml 템플릿 핸들러가 제거되었습니다.
config.action_view.cache_template_loading
이 다시 도입되어 템플릿 캐싱 여부를 결정할 수 있습니다.제출 폼 헬퍼가 더 이상 "objectnameid” ID를 생성하지 않습니다.
FormHelper#form_for
에서:method
옵션을:html
해시 내부가 아닌 직접 지정할 수 있습니다.form_for(@post, remote: true, method: :delete)
와 같이 사용할 수 있습니다.JavaScriptHelper#j()
를JavaScriptHelper#escape_javascript()
의 별칭으로 제공했습니다. 이를 통해 JSON 젬이 템플릿에 추가하는Object#j()
메서드를 대체할 수 있습니다.날짜 및 시간 선택기에 AM/PM 형식을 지원합니다.
auto_link
가 Rails에서 제거되었으며 rails_autolink 젬으로 추출되었습니다.
Active Record
pluralize_table_names
클래스 메서드를 추가하여 개별 모델의 테이블 이름을 단수화/복수화할 수 있습니다. 이전에는ActiveRecord::Base.pluralize_table_names
를 통해 전역적으로만 설정할 수 있었습니다.class User < ActiveRecord::Base self.pluralize_table_names = false end
단일 연관 관계에 대한 블록 설정을 추가했습니다. 블록은 인스턴스 초기화 후에 호출됩니다.
class User < ActiveRecord::Base has_one :account end user.build_account{ |a| a.credit_limit = 100.0 }
ActiveRecord::Base.attribute_names
를 추가하여 속성 이름 목록을 반환합니다. 모델이 추상 클래스이거나 테이블이 존재하지 않는 경우 빈 배열을 반환합니다.CSV 픽스처가 deprecate되었으며 Rails 3.2.0에서 지원이 중단될 예정입니다.
ActiveRecord#new
,ActiveRecord#create
,ActiveRecord#update_attributes
에 역할 기반 속성 할당을 위한 옵션 해시를 추가했습니다. 이는 Active Model의 새로운 대량 할당 기능을 기반으로 합니다:class Post < ActiveRecord::Base attr_accessible :title attr_accessible :title, :published_at, :as => :admin end Post.new(params[:post], :as => :admin)
default_scope
에 블록, 람다 또는 호출 가능한 객체를 전달하여 지연 평가를 할 수 있습니다.기본 스코프는 이제 가능한 늦게 평가되어, 기본 스코프가 포함된 스코프를 만들고 이를 Model.unscoped로 제거하는 문제를 방지합니다.
PostgreSQL 어댑터는 PostgreSQL 버전 8.2 이상만 지원합니다.
ConnectionManagement
미들웨어가 변경되어 래크 본문이 플러시된 후 연결 풀을 정리합니다.update_column
메서드가 Active Record에 추가되었습니다. 이 새로운 메서드는 유효성 검사와 콜백을 건너뛰고 지정된 속성을 업데이트합니다. 콜백을 실행하지 않고updated_at
열을 수정해야 하는 경우에만 사용해야 합니다. 새 레코드에서는 호출하면 안 됩니다.:through
옵션이 있는 연관 관계에서 through 또는 source 연관 관계로 모든 연관 관계를 사용할 수 있게 되었습니다. 여기에는:through
옵션이 있는 다른 연관 관계와has_and_belongs_to_many
연관 관계도 포함됩니다.현재 데이터베이스 연결에 대한 구성은
ActiveRecord::Base.connection_config
를 통해 액세스할 수 있습니다.제한과 오프셋이 둘 다 제공되지 않는 한 COUNT 쿼리에서 제거됩니다.
People.limit(1).count # => 'SELECT COUNT(*) FROM people' People.offset(1).count # => 'SELECT COUNT(*) FROM people' People.limit(1).offset(1).count # => 'SELECT COUNT(*) FROM people LIMIT 1 OFFSET 1'
ActiveRecord::Associations::AssociationProxy
가 분할되었습니다. 이제 연관 관계를 처리하는Association
클래스(및 하위 클래스)와 컬렉션 연관 관계를 래핑하는 별도의 얇은 래퍼인CollectionProxy
가 있습니다. 이를 통해 네임스페이스 오염을 방지하고 관심사를 분리하며, 향후 리팩토링을 용이하게 합니다.단일 연관 관계(
has_one
,belongs_to
)는 더 이상 프록시가 아니며, 연관 레코드나nil
을 직접 반환합니다. 따라서 문서화되지 않은 메서드bob.mother.create
를 사용해서는 안 되며,bob.create_mother
를 사용해야 합니다.has_many :through
연관 관계에:dependent
옵션을 지원합니다. 역사적 및 실용적 이유로 인해association.delete(*records)
의 기본 삭제 전략은:nullify
가 아닌:delete_all
입니다. 또한 소스 리플렉션이 belongs_to인 경우에만 작동합니다. 다른 상황에서는 through 연관 관계를 직접 수정해야 합니다.has_and_belongs_to_many
와has_many :through
에 대한association.destroy
의 동작이 변경되었습니다. 이제 연관 관계에서 ‘파괴’ 또는 ‘삭제'는 '링크를 제거하는 것'을 의미하며, '연관 레코드를 제거하는 것'은 아닙니다.이전에는
has_and_belongs_to_many.destroy(*records)
가 레코드 자체를 파괴했습니다. 이제는 네, 번역을 계속하겠습니다.
Active Record
이전에는
has_and_belongs_to_many.destroy(*records)
가 레코드 자체를 파괴했습니다. 이제는 조인 테이블의 레코드만 삭제합니다.이전에는
has_many_through.destroy(*records)
가 레코드 자체와 조인 테이블의 레코드를 모두 파괴했습니다. [참고: 이전 Rails 버전에서는 레코드 자체만 삭제했습니다.] 이제는 조인 테이블의 레코드만 파괴합니다.이 변경 사항은 일부 호환성이 깨질 수 있지만, 이를 deprecate하고 변경하는 방법이 없었습니다. 이 변경은 다양한 유형의 연관 관계에서 '파괴’ 또는 ‘삭제'의 의미를 일관성 있게 하기 위해 이루어졌습니다. 레코드 자체를 파괴하려면
records.association.each(&:destroy)
를 사용할 수 있습니다.change_table
에:bulk => true
옵션을 추가하여 블록에 정의된 모든 스키마 변경을 단일 ALTER 문으로 수행할 수 있습니다.change_table(:users, :bulk => true) do |t| t.string :company_name t.change :birthdate, :datetime end
has_and_belongs_to_many
조인 테이블의 속성에 대한 액세스를 제거했습니다.has_many :through
를 사용해야 합니다.has_one
과belongs_to
연관 관계에create_association!
메서드를 추가했습니다.마이그레이션이 가역적이 되었습니다. 즉, Rails가 마이그레이션을 어떻게 되돌릴지 알아서 처리합니다. 가역적 마이그레이션을 사용하려면
change
메서드를 정의하면 됩니다.class MyMigration < ActiveRecord::Migration def change create_table(:horses) do |t| t.column :content, :text t.column :remind_at, :datetime end end end
자동으로 되돌릴 수 없는 일부 작업이 있습니다. 이를 어떻게 되돌릴지 알고 있다면
up
과down
을 마이그레이션에 정의해야 합니다.change
에서 되돌릴 수 없는 작업을 정의하면 내려갈 때IrreversibleMigration
예외가 발생합니다.마이그레이션이 이제 클래스 메서드 대신 인스턴스 메서드를 사용합니다:
class FooMigration < ActiveRecord::Migration def up # 더 이상 self.up이 아님 # ... end end
모델 및 구성적 마이그레이션 생성기(예: addnameto_users)에서 생성된 마이그레이션 파일은 가역적 마이그레이션의
change
메서드를 사용합니다. 이전 스타일의up
과down
메서드는 더 이상 사용되지 않습니다.연관 관계의 문자열 SQL 조건 보간을 제거했습니다. 대신 프로시저를 사용해야 합니다.
has_many :things, :conditions => 'foo = #{bar}' # 이전 has_many :things, :conditions => proc { "foo = #{bar}" } # 이후
프로시저 내부에서
self
는 연관 관계의 소유자 객체이며, 연관 관계를 eager loading하는 경우self
는 연관 관계가 포함된 클래스입니다.일반적인 조건을 프로시저 내부에 사용할 수 있습니다:
has_many :things, :conditions => proc { ["foo = ?", bar] }
이전에는
has_and_belongs_to_many
연관 관계의:insert_sql
및:delete_sql
에서 '레코드'를 호출할 수 있었습니다. 이제 인수로 전달됩니다.ActiveRecord::Base#has_secure_password
(viaActiveModel::SecurePassword
)를 추가하여 BCrypt 암호화와 솔트를 사용하는 간단한 비밀번호 사용을 캡슐화했습니다.# 스키마: User(name:string, password_digest:string, password_salt:string) class User < ActiveRecord::Base has_secure_password end
모델 생성 시
belongs_to
또는references
열에 대해 기본적으로add_index
가 추가됩니다.belongs_to
객체의 ID를 설정하면 해당 객체에 대한 참조가 업데이트됩니다.ActiveRecord::Base#dup
와ActiveRecord::Base#clone
의 의미가 일반 Ruby의 dup와 clone 의미에 더 가깝게 변경되었습니다.ActiveRecord::Base#clone
을 호출하면 레코드의 얕은 복사본이 생성되며, 동결 상태도 복사됩니다. 콜백은 호출되지 않습니다.ActiveRecord::Base#dup
를 호출하면 레코드가 복제되며, 초기화 후 훅이 호출됩니다. 동결 상태는 복사되지 않으며, 모든 연관 관계가 지워집니다. 복제된 레코드는new_record?
가true
를 반환하고,id
필드가nil
이며, 저장할 수 있습니다.쿼리 캐시가 이제 준비된 문을 사용하도록 변경되었습니다. 애플리케이션에 변경이 필요하지 않습니다.
Active Model
attr_accessible
에 역할을 지정하는:as
옵션이 추가되었습니다.InclusionValidator
,ExclusionValidator
,FormatValidator
에 프로시저, 람다 또는 호출 가능한 객체를 받는 옵션이 추가되었습니다. 이 옵션은 현재 레코드를 인수로 받아include?
에 응답하는 객체를 반환합니다(InclusionValidator
와ExclusionValidator
의 경우), 또는 정규 표현식 객체를 반환합니다(FormatValidator
의 경우).ActiveModel::SecurePassword
를 추가하여 BCrypt 암호화와 솔트를 사용하는 간단한 비밀번호 사용을 캡슐화했습니다.ActiveModel::AttributeMethods
를 통해 속성을 요구 시 정의할 수 있습니다.옵저버를 선택적으로 활성화/비활성화할 수 있는 지원이 추가되었습니다.
Active Resource
기본 형식이 모든 요청에 대해 JSON으로 변경되었습니다. XML을 계속 사용하려면 클래스에서
self.format = :xml
로 설정해야 합니다. 예:class User < ActiveResource::Base self.format = :xml end
Active Support
ActiveSupport::Dependencies
가load_missing_constant
에서NameError
를 발생시키도록 변경되었습니다.Kernel#quietly
를 추가하여STDOUT
과STDERR
를 모두 침묵시킬 수 있습니다.String#inquiry
를 추가하여 문자열을StringInquirer
객체로 변환하는 편의 메서드를 제공했습니다.객체가 다른 객체에 포함되어 있는지 테스트하는
Object#in?
을 추가했습니다.LocalCache
전략이 이제 실제 미들웨어 클래스이며, 더 이상 익명 클래스가 아닙니다.ActiveSupport::Dependencies::ClassCache
클래스가 리로드 가능한 클래스에 대한 참조를 보유하기 위해 도입되었습니다.ActiveSupport::Dependencies::Reference
가 새로운ClassCache
를 직접 활용하도록 리팩토링되었습니다.Ruby 1.8에
Range#cover?
를 백포트했습니다.weeks_ago
와prev_week
를 Date/DateTime/Time에 추가했습니다.before_remove_const
콜백을ActiveSupport::Dependencies.remove_unloadable_constants!
에 추가했습니다.
Deprecations:
ActiveSupport::SecureRandom
이 Ruby 표준 라이브러리의SecureRandom
으로 deprecate되었습니다.
크레딧
Rails에 많은 시간을 보내 만든 모든 사람들의 전체 기여자 목록을 참조하세요. 모든 분들께 박수를 보냅니다.
Rails 3.1 릴리스 노트는 Vijay Dev가 작성했습니다.