Ruby on Rails 4.2 릴리스 노트

Rails 4.2의 주요 기능:

  • Active Job
  • 비동기 메일
  • Adequate Record
  • Web Console
  • 외래키 지원

이 릴리스 노트에는 주요 변경 사항만 포함되어 있습니다. 다른 기능, 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 주 저장소에서 커밋 목록을 확인하십시오.


Rails 4.2로 업그레이드하기

기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 4.1로 먼저 업그레이드하고 애플리케이션이 예상대로 작동하는지 확인한 후에 Rails 4.2로 업그레이드를 시도해야 합니다. Rails 4.1에서 Rails 4.2로 업그레이드할 때 주의해야 할 사항은 Ruby on Rails 업그레이드 가이드에서 확인할 수 있습니다.

주요 기능

Active Job

Active Job은 Rails 4.2의 새로운 프레임워크입니다. 이는 Resque, Delayed Job, Sidekiq 등 다양한 큐 시스템 위에 구축된 공통 인터페이스입니다.

Active Job API로 작성된 작업은 해당 어댑터를 통해 지원되는 모든 큐에서 실행될 수 있습니다. Active Job에는 작업을 즉시 실행하는 인라인 러너가 사전 구성되어 있습니다.

작업은 종종 Active Record 객체를 인수로 취해야 합니다. Active Job은 객체 자체를 직렬화하는 대신 URI(Uniform Resource Identifier)로 객체 참조를 전달합니다. 새로운 Global ID 라이브러리는 URI를 구축하고 참조된 객체를 조회합니다. Global ID를 내부적으로 사용하여 Active Record 객체를 작업 인수로 전달하는 것이 가능합니다.

예를 들어 trashable이 Active Record 객체인 경우 직렬화 없이도 다음과 같은 작업이 실행됩니다:

class TrashableCleanupJob < ActiveJob::Base
  def perform(trashable, depth)
    trashable.cleanup(depth)
  end
end

자세한 내용은 Active Job 기본 사항 가이드를 참조하십시오.

비동기 메일

Active Job 위에 구축된 Action Mailer는 deliver_later 메서드를 제공하여 큐를 통해 이메일을 보낼 수 있습니다. 이를 통해 비동기 큐(기본 인라인 큐는 차단)를 사용할 때 컨트롤러나 모델을 차단하지 않습니다.

즉시 이메일을 보내려면 deliver_now를 사용할 수 있습니다.

Adequate Record

Adequate Record는 Active Record의 성능 향상 기능으로, 일반적인 findfind_by 호출과 일부 연관 쿼리를 최대 2배 빠르게 만듭니다.

이는 일반적인 SQL 쿼리를 준비된 문으로 캐싱하고 유사한 호출에서 이를 재사용하여 후속 호출에서 대부분의 쿼리 생성 작업을 건너뛰는 방식으로 작동합니다. 자세한 내용은 Aaron Patterson의 블로그 게시물을 참조하십시오.

Active Record는 사용자 개입이나 코드 변경 없이도 이 기능을 자동으로 활용합니다. 지원되는 작업의 예는 다음과 같습니다:

Post.find(1)  # 첫 번째 호출에서 준비된 문 생성 및 캐싱
Post.find(2)  # 후속 호출에서 캐시된 준비된 문 재사용

Post.find_by_title('first post')
Post.find_by_title('second post')

Post.find_by(title: 'first post')
Post.find_by(title: 'second post')

post.comments
post.comments(true)

중요한 점은 위의 예에서 보듯이 준비된 문이 메서드 호출에 전달된 값을 캐시하는 것이 아니라 이를 위한 자리 표시자를 가진다는 것입니다.

다음과 같은 시나리오에서는 캐싱이 사용되지 않습니다:

  • 모델에 기본 범위가 있는 경우
  • 모델이 단일 테이블 상속을 사용하는 경우
  • find에 ID 목록을 전달하는 경우, 예:

    # 캐시되지 않음
    Post.find(1, 2, 3)
    Post.find([1,2])
    
  • SQL 조각을 사용하는 find_by, 예:

    Post.find_by('published_at < ?', 2.weeks.ago)
    

Web Console

Rails 4.2로 생성된 새 애플리케이션에는 기본적으로 Web Console gem이 포함됩니다. Web Console은 모든 오류 페이지에 대화형 Ruby 콘솔을 추가하고 console 뷰 및 컨트롤러 헬퍼를 제공합니다.

오류 페이지의 대화형 콘솔을 통해 예외가 발생한 곳의 컨텍스트에서 코드를 실행할 수 있습니다. console 헬퍼를 호출하면 렌더링이 완료된 후 최종 컨텍스트에서 대화형 콘솔이 실행됩니다.

외래키 지원

마이그레이션 DSL에 외래키 추가 및 제거 기능이 추가되었습니다. 외래키는 schema.rb에도 덤프됩니다. 현재 mysql, mysql2postgresql 어댑터만 외래키를 지원합니다.

# `articles.author_id`를 `authors.id`를 참조하는 외래키 추가
add_foreign_key :articles, :authors

# `articles.author_id`를 `users.lng_id`를 참조하는 외래키 추가
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"

# `accounts.branch_id`에 대한 외래키 제거
remove_foreign_key :accounts, :branches

# `accounts.owner_id`에 대한 외래키 제거
remove_foreign_key :accounts, column: :owner_id

addforeignkeyremoveforeignkey API 문서에서 전체 설명을 확인할 수 있습니다.

호환성 문제

이전에 사용되던 기능이 제거되었습니다. 각 구성 요소의 새로운 사용 중단 사항을 참조하십시오.

다음과 같은 변경 사항으로 인해 즉각적인 조치가 필요할 수 있습니다.

render에 문자열 인수 사용

이전에는 컨트롤러 작업에서 render "foo/bar"를 호출하면 render file: "foo/bar"와 동일했습니다. Rails 4.2에서는 이것이 render template: "foo/bar"를 의미하도록 변경되었습니다. 파일을 렌더링해야 하는 경우 명시적 형식(render file: "foo/bar")을 사용하십시오.

respond_with / 클래스 수준 respond_to

respond_with와 해당 클래스 수준 respond_toresponders gem으로 이동되었습니다. 이를 사용하려면 Gemfilegem "responders", "~> 2.0"을 추가하십시오:

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  respond_to :html, :json

  def show
    @user = User.find(params[:id])
    respond_with @user
  end
end

인스턴스 수준 respond_to는 영향을 받지 않습니다:

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html
      format.json { render json: @user }
    end
  end
end

rails server의 기본 호스트

Rack의 변경으로 인해 rails server가 이제 기본적으로 localhost에서 수신 대기합니다. 이는 표준 개발 워크플로에 최소한의 영향을 미치므로 http://127.0.0.1:3000http://localhost:3000을 계속 사용할 수 있습니다.

그러나 이 변경으로 인해 가상 머신의 개발 환경에서 호스트 머신에서 Rails 서버에 액세스할 수 없게 됩니다. 이러한 경우 rails server -b 0.0.0.0으로 서버를 시작하여 이전 동작을 복원할 수 있습니다.

이렇게 하는 경우 신뢰할 수 있는 네트워크의 머신만 개발 서버에 액세스할 수 있도록 방화벽을 적절히 구성해야 합니다.

render의 상태 옵션 기호 변경

Rack의 변경으로 인해 render 메서드에서 :status 옵션에 허용되는 기호가 변경되었습니다:

  • 306: :reserved가 제거되었습니다.
  • 413: :request_entity_too_large:payload_too_large로 이름이 변경되었습니다.
  • 414: :request_uri_too_long:uri_too_long으로 이름이 변경되었습니다.
  • 416: :requested_range_not_satisfiable:range_not_satisfiable로 이름이 변경되었습니다.

알 수 없는 기호로 render를 호출하면 응답 상태가 기본적으로 500이 됨을 유의하십시오.

HTML 세니타이저

HTML 세니타이저가 LoofahNokogiri를 기반으로 한 새로운 강력한 구현으로 교체되었습니다. 새로운 세니타이저는 더 안전하고 세니타이즈 기능이 더 강력하고 유연합니다.

새로운 알고리즘으로 인해 특정 병리적 입력에 대한 세니타이즈된 출력이 달라질 수 있습니다.

이전 세니타이저의 정확한 출력이 필요한 경우 rails-deprecated_sanitizer gem을 Gemfile에 추가하여 이전 동작을 사용할 수 있습니다. 이 gem은 사용자 선택 사항이므로 사용 중단 경고를 발생시키지 않습니다.

rails-deprecated_sanitizer는 Rails 4.2에서만 지원되며 Rails 5.0에서는 유지되지 않습니다.

새로운 세니타이저에 대한 자세한 내용은 이 블로그 게시물을 참조하십시오.

assert_select

assert_select는 이제 [Nok네, 번역을 계속하겠습니다.

assert_select

assert_select는 이제 Nokogiri를 기반으로 합니다. 그 결과 이전에는 유효했던 일부 선택기가 더 이상 지원되지 않습니다. 애플리케이션에서 이러한 구문을 사용하는 경우 이를 업데이트해야 합니다:

  • 속성 선택기의 값에 비alphanumeric 문자가 포함된 경우 인용부호로 묶어야 합니다.

    # 이전
    a[href=/]
    a[href$=/]
    
    # 현재
    a[href="/"]
    a[href$="/"]
    
  • 잘못 중첩된 요소가 포함된 HTML 소스에서 빌드된 DOM은 달라질 수 있습니다.

    예를 들어:

    # 내용: <div><i><p></i></div>
    
    # 이전:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => false
    assert_select('i > p')    # => true
    
    # 현재:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => true
    assert_select('i > p')    # => false
    
  • 선택된 데이터에 엔티티가 포함된 경우 비교를 위해 선택된 값은 이전에는 원시(예: AT&amp;T)였지만 이제는 평가됩니다(예: AT&T).

    # 내용: <p>AT&amp;T</p>
    
    # 이전:
    assert_select('p', 'AT&amp;T')  # => true
    assert_select('p', 'AT&T')      # => false
    
    # 현재:
    assert_select('p', 'AT&T')      # => true
    assert_select('p', 'AT&amp;T')  # => false
    

또한 대체 구문이 변경되었습니다.

이제 :match CSS 선택기를 사용해야 합니다:

assert_select ":match('id', ?)", 'comment_1'

또한 어설션 실패 시 정규식 대체의 모양이 달라졌습니다. 여기서 /hello/는:

assert_select(":match('id', ?)", /hello/)

"(?-mix:hello)"가 됩니다:

Expected at least 1 element matching "div:match('id', "(?-mix:hello)")", found 0..
Expected 0 to be >= 1.

assert_select에 대한 자세한 내용은 Rails Dom Testing 문서를 참조하십시오.

Railties

자세한 변경 사항은 변경 로그를 참조하십시오.

제거

  • --skip-action-view 옵션이 앱 생성기에서 제거되었습니다. (Pull Request)

  • rails application 명령이 대체 없이 제거되었습니다. (Pull Request)

사용 중단

  • 프로덕션 환경에 대한 config.log_level 누락이 사용 중단되었습니다. (Pull Request)

  • rake test:allrake test로 대체되어 test 폴더의 모든 테스트를 실행합니다. (Pull Request)

  • rake test:all:dbrake test:db로 대체되었습니다. (Pull Request)

  • Rails::Rack::LogTailer가 대체 없이 사용 중단되었습니다. (Commit)

주요 변경 사항

  • 기본 애플리케이션 Gemfileweb-console이 도입되었습니다. (Pull Request)

  • 모델 생성기에 연관 관계에 대한 required 옵션이 추가되었습니다. (Pull Request)

  • 사용자 정의 구성 옵션을 정의하기 위해 x 네임스페이스가 도입되었습니다:

    # config/environments/production.rb
    config.x.payment_processing.schedule = :daily
    config.x.payment_processing.retries  = 3
    config.x.super_debugger              = true
    

    이러한 옵션은 구성 개체를 통해 사용할 수 있습니다:

    Rails.configuration.x.payment_processing.schedule # => :daily
    Rails.configuration.x.payment_processing.retries  # => 3
    Rails.configuration.x.super_debugger              # => true
    

    (Commit)

  • 현재 환경에 대한 구성을 로드하는 Rails::Application.config_for가 도입되었습니다.

    # config/exception_notification.yml
    production:
      url: http://127.0.0.1:8080
      namespace: my_app_production
    development:
      url: http://localhost:3001
      namespace: my_app_development
    
    # config/environments/production.rb
    Rails.application.configure do
      config.middleware.use ExceptionNotifier, config_for(:exception_notification)
    end
    

    (Pull Request)

  • 앱 생성기에 터보링크 통합을 생성하지 않는 --skip-turbolinks 옵션이 도입되었습니다. (Commit)

  • 애플리케이션을 부트스트랩할 때 자동화된 설정 코드에 대한 bin/setup 스크립트가 도입되었습니다. (Pull Request)

  • 개발 환경에서 config.assets.digest의 기본값이 true로 변경되었습니다. (Pull Request)

  • rake notes에 대한 새 확장을 등록하는 API가 도입되었습니다. (Pull Request)

  • Rails 템플릿에 대한 after_bundle 콜백이 도입되었습니다. (Pull Request)

  • Rails.gem_versionGem::Version.new(Rails.version)을 반환하는 편의 메서드로 도입되었습니다. (Pull Request)

Action Pack

자세한 변경 사항은 변경 로그를 참조하십시오.

제거

  • respond_with와 클래스 수준 respond_to가 Rails에서 제거되고 responders gem(버전 2.0)으로 이동되었습니다. 이 기능을 계속 사용하려면 Gemfilegem "responders", "~> 2.0"을 추가하십시오. (Pull Request, 자세한 내용)

  • AbstractController::Helpers::ClassMethods::MissingHelperErrorAbstractController::Helpers::MissingHelperError로 대체되었습니다. (Commit)

사용 중단

  • *_path 헬퍼에 대한 only_path 옵션이 사용 중단되었습니다. (Commit)

  • assert_tag, assert_no_tag, find_tagfind_all_tagassert_select로 사용 중단되었습니다. (Commit)

  • 라우터의 :to 옵션에 대한 지원이 심볼 또는 # 문자를 포함하지 않는 문자열로 사용 중단되었습니다:

    get '/posts', to: MyRackApp    => (변경 필요 없음)
    get '/posts', to: 'post#index' => (변경 필요 없음)
    get '/posts', to: 'posts'      => get '/posts', controller: :posts
    get '/posts', to: :index       => get '/posts', action: :index
    

    (Commit)

  • URL 헬퍼에서 문자열 키 사용이 사용 중단되었습니다:

    # 나쁨
    root_path('controller' => 'posts', 'action' => 'index')
    
    # 좋음
    root_path(controller: 'posts', action: 'index')
    

    (Pull Request)

주요 변경 사항

  • *_filter 메서드 계열이 문서에서 제거되었습니다. 이 사용은 *_action 메서드 계열로 대체하는 것이 좋습니다:

    after_filter          => after_action
    append_after_filter   => append_after_action
    append_around_filter  => append_around_action
    append_before_filter  => append_before_action
    around_filter         => around_action
    before_filter         => before_action
    prepend_after_filter  => prepend_after_action
    prepend_around_filter => prepend_around_action
    prepend_before_filter => prepend_before_action
    skip_after_filter     => skip_after_action
    skip_around_filter    => skip_around_action
    skip_before_filter    => skip_before_action
    skip_filter           => skip_action_callback
    

    애플리케이션이 현재 이러한 메서드에 의존하는 경우 대체 *_action 메서드를 사용해야 합니다. 이 메서드는 향후 사용 중단되고 Rails에서 제거될 것입니다.

    (Commit 1, 2)

  • render nothing: true 또는 nil 본문 렌더링은 더 이상 단일 공백 패딩을 추가하지 않습니다. (Pull Request)

  • Rails는 이제 템플릿의 다이제스트를 ETag에 자동으로 포함합니다. (Pull Request)

  • URL 헬퍼에 전달된 세그먼트가 이제 자동으로 이스케이프됩니다. (Commit)

  • 전역적으로 허용되는 매개변수를 구성하는 always_permitted_parameters 옵션이 도입되었습니다. 이 구성의 기본값은 ['controller', 'action']입니다. (Pull Request)

  • RFC 4791에서 정의된 HTTP 메서드 MKCALENDAR가 추가되었습니다. (Pull Request)

  • *_fragment.action_controller 알림에 컨트롤러 및 작업 이름이 페이로드에 포함되도록 개선되었습니다. (Pull Request)

  • CSRF 실패 로깅을 비활성화하는 옵션이 추가되었습니다. (Pull Request)

  • Rails 서버가 정적 자산을 제공하도록 설정된 경우 클라이언트가 gzip을 지원하고 디스크에 .gz 파일이 있는 경우 gzip 파일이 제공됩니다. 기본적으로 자산 파이프라인은 모든 압축 가능한 자산에 대해 .gz 파일을 생성합니다. gzip 파일 제공은 데이터 전송을 최소화하고 네, 번역을 계속하겠습니다.

Action View

자세한 변경 사항은 변경 로그를 참조하십시오.

사용 중단

  • AbstractController::Base.parent_prefixes가 사용 중단되었습니다. 보기를 찾을 위치를 변경하려면 AbstractController::Base.local_prefixes를 재정의하십시오. (Pull Request)

  • ActionView::Digestor#digest(name, format, finder, options = {})가 사용 중단되었습니다. 인수는 대신 해시로 전달되어야 합니다. (Pull Request)

주요 변경 사항

  • render "foo/bar"는 이제 render file: "foo/bar"가 아닌 render template: "foo/bar"로 확장됩니다. (Pull Request)

  • 폼 헬퍼가 더 이상 숨겨진 필드를 둘러싸는 <div> 요소를 생성하지 않습니다. (Pull Request)

  • 컬렉션으로 렌더링된 부분에 대한 #{partial_name}_iteration이라는 특수 로컬 변수가 도입되었습니다. 이를 통해 index, size, first?last? 메서드를 통해 현재 반복 상태에 액세스할 수 있습니다. (Pull Request)

  • 자리 표시자 I18n은 label I18n과 동일한 규칙을 따릅니다. (Pull Request)

Action Mailer

자세한 변경 사항은 변경 로그를 참조하십시오.

사용 중단

  • 메일러에서 *_path 헬퍼가 사용 중단되었습니다. 항상 *_url 헬퍼를 사용하십시오. (Pull Request)

  • deliver / deliver!deliver_now / deliver_now!로 사용 중단되었습니다. (Pull Request)

주요 변경 사항

  • 템플릿에서 link_tourl_for는 기본적으로 절대 URL을 생성합니다. 더 이상 only_path: false를 전달할 필요가 없습니다. (Commit)

  • deliver_later가 도입되어 애플리케이션의 큐에 작업을 예약하여 이메일을 비동기적으로 전송할 수 있습니다. (Pull Request)

  • 개발 환경 외부에서 메일러 미리보기를 활성화하는 show_previews 구성 옵션이 추가되었습니다. (Pull Request)

Active Record

자세한 변경 사항은 변경 로그를 참조하십시오.

제거

  • cache_attributes와 관련 기능이 제거되었습니다. 모든 속성이 캐시됩니다. (Pull Request)

  • 사용 중단된 메서드 ActiveRecord::Base.quoted_locking_column이 제거되었습니다. (Pull Request)

  • 사용 중단된 ActiveRecord::Migrator.proper_table_name이 제거되었습니다. 대신 ActiveRecord::Migration 인스턴스 메서드 proper_table_name을 사용하십시오. (Pull Request)

  • 사용되지 않는 :timestamp 유형이 제거되었습니다. 모든 경우에 투명하게 :datetime으로 별칭됩니다. Active Record 외부로 보내지는 열 유형(예: XML 직렬화)의 일관성 문제를 해결합니다. (Pull Request)

사용 중단

  • after_commitafter_rollback 내부의 오류 삼킴이 사용 중단되었습니다. (Pull Request)

  • has_many :through 연관 관계의 카운터 캐시 자동 감지에 대한 지원이 사용 중단되었습니다. 대신 has_manybelongs_to 연관 관계에 대해 수동으로 카운터 캐시를 지정해야 합니다. (Pull Request)

  • Active Record 객체를 .find 또는 .exists?에 전달하는 것이 사용 중단되었습니다. 먼저 객체의 id를 호출하십시오. (Commit 1, 2)

  • PostgreSQL 범위 값의 시작 부분을 제외하는 것에 대한 부분적인 지원이 사용 중단되었습니다. 현재 PostgreSQL 범위를 Ruby 범위에 매핑합니다. 이 변환은 Ruby 범위가 시작 부분을 제외하는 것을 지원하지 않기 때문에 완전히 가능하지 않습니다.

    현재 솔루션인 시작 부분을 증가시키는 것은 올바르지 않으며 이제 사용 중단되었습니다. succ가 정의되지 않는 등의 이유로 증가 방법을 알 수 없는 하위 유형의 경우 시작 부분을 제외하는 범위에 대해 ArgumentError가 발생합니다. (Commit)

  • 연결 없이 DatabaseTasks.load_schema를 호출하는 것이 사용 중단되었습니다. 대신 DatabaseTasks.load_schema_current를 사용하십시오. (Commit)

  • sanitize_sql_hash_for_conditions가 대체 없이 사용 중단되었습니다. 쿼리 및 업데이트를 수행하는 데 Relation을 사용하는 것이 선호되는 API입니다. (Commit)

  • :null 옵션을 전달하지 않고 add_timestampst.timestamps가 사용 중단되었습니다. Rails 5에서 기본값이 null: true에서 null: false로 변경됩니다. (Pull Request)

  • 더 이상 필요하지 않으므로 Reflection#source_macro가 대체 없이 사용 중단되었습니다. (Pull Request)

  • serialized_attributes가 대체 없이 사용 중단되었습니다. (Pull Request)

  • 열이 없는 경우 column_for_attribute에서 nil을 반환하는 것이 사용 중단되었습니다. Rails 5.0에서는 null 객체를 반환할 것입니다. (Pull Request)

  • 인스턴스 상태에 따라 정의된 연관 관계(인수를 사용하는 범위로 정의된 연관 관계)에 대한 .joins, .preload.eager_load의 사용이 대체 없이 사용 중단되었습니다. (Commit)

주요 변경 사항

  • SchemaDumperforce: :cascade를 사용하여 create_table을 사용합니다. 이를 통해 외래키가 있는 경우에도 스키마를 다시 로드할 수 있습니다.

  • 단일 연관 관계에 대한 :required 옵션이 추가되어 연관 관계에 대한 존재 유효성 검사를 정의합니다. (Pull Request)

  • ActiveRecord::Dirty가 이제 변경 가능한 값의 현장 변경을 감지합니다. Active Record 모델의 직렬화된 속성이 변경되지 않은 경우 더 이상 저장되지 않습니다. 이는 문자열 열과 PostgreSQL의 JSON 열과 같은 다른 유형에서도 작동합니다. (Pull Requests 1, 2, 3)

  • 현재 환경의 데이터베이스를 비우는 db:purge Rake 작업이 도입되었습니다. (Commit)

  • ActiveRecord::Base#validate!가 도입되어 레코드가 잘못된 경우 ActiveRecord::RecordInvalid를 발생시킵니다. (Pull Request)

  • validatevalid?의 별칭으로 도입되었습니다. (Pull Request)

  • touch가 한 번에 여러 속성을 터치할 수 있습니다. (Pull Request)

  • PostgreSQL 어댑터가 이제 PostgreSQL 9.4 이상에서 jsonb 데이터 유형을 지원합니다. (Pull Request)

  • PostgreSQL 및 SQLite 어댑터가 더 이상 문자열 열에 기본 제한 255자를 추가하지 않습니다. (Pull Request)

  • PostgreSQL 어댑터에 citext 열 유형에 대한 지원이 추가되었습니다. (Pull Request)

  • PostgreSQL 어댑터에 사용자 정의 범위 유형에 대한 지원이 추가되었습니다. (Commit)

  • sqlite3:///some/path가 이제 절대 시스템 경로 /some/path를 가리킵니다. 상대 경로의 경우 sqlite3:some/path를 사용하십시오. (이전에는 sqlite3:///some/path가 상대 경로 some/path를 가리켰습니다. 이 동작은 Rails 4.1에서 사용 중단되었습니다.) (Pull Request)

  • MySQL 5.6 이상에 대한 초 단위 지원이 추가되었습니다. (Pull Request 1, 2)

  • ActiveRecord::Base#pretty_print가 모델을 예쁘게 출력하도록 추가되었습니다. (Pull Request)

  • ActiveRecord::Base#reload가 이제 m = Model.find(m.id)와 동일하게 동작하므로 사용자 정의 SELECT에서 추가 속성을 더 이상 유지하지 않습니다. (Pull Request)

  • ActiveRecord::Base#reflections가 이제 기호 키 대신 문자열 키를 반환합니다. (Pull Request)

  • 마이그레이션의 references 메서드에 외래키의 유형(예: :uuid)을 지정하는 type 옵션이 추가되네, 번역을 계속하겠습니다.

Active Model

자세한 변경 사항은 변경 로그를 참조하십시오.

제거

  • 대체 없이 사용 중단된 Validator#setup이 제거되었습니다. (Pull Request)

사용 중단

  • reset_#{attribute}restore_#{attribute}로 사용 중단되었습니다. (Pull Request)

  • ActiveModel::Dirty#reset_changesclear_changes_information로 사용 중단되었습니다. (Pull Request)

주요 변경 사항

  • validatevalid?의 별칭으로 도입되었습니다. (Pull Request)

  • ActiveModel::Dirty에 변경된(더러운) 속성을 이전 값으로 복원하는 restore_attributes 메서드가 도입되었습니다. (Pull Request 1, 2)

  • has_secure_password가 더 이상 기본적으로 빈 암호(공백만 포함)를 허용하지 않습니다. (Pull Request)

  • has_secure_password가 이제 유효성 검사가 활성화된 경우 암호가 72자 미만인지 확인합니다. (Pull Request)

Active Support

자세한 변경 사항은 변경 로그를 참조하십시오.

제거

  • 사용 중단된 Numeric#ago, Numeric#until, Numeric#since, Numeric#from_now가 제거되었습니다. (Commit)

  • ActiveSupport::Callbacks에 대한 문자열 기반 종료자가 제거되었습니다. (Pull Request)

사용 중단

  • 대체 없이 Kernel#silence_stderr, Kernel#captureKernel#quietly가 사용 중단되었습니다. (Pull Request)

  • Class#superclass_delegating_accessor가 사용 중단되었습니다. 대신 Class#class_attribute를 사용하십시오. (Pull Request)

  • ActiveSupport::SafeBuffer#prepend!가 사용 중단되었습니다. ActiveSupport::SafeBuffer#prepend가 동일한 기능을 수행합니다. (Pull Request)

주요 변경 사항

  • 테스트 케이스 실행 순서를 지정하는 새 구성 옵션 active_support.test_order가 도입되었습니다. 이 옵션은 현재 :sorted로 기본 설정되어 있지만 Rails 5.0에서는 :random으로 변경될 것입니다. (Commit)

  • Object#tryObject#try!에서 명시적 수신기 없이 블록을 사용할 수 있습니다. (Commit, Pull Request)

  • travel_to 테스트 헬퍼가 이제 usec 구성 요소를 0으로 잘라냅니다. (Commit)

  • Object#itself가 항등 함수로 도입되었습니다. (Commit 1, 2)

  • Object#with_options에서 명시적 수신기 없이 블록을 사용할 수 있습니다. (Pull Request)

  • 단어 수로 문자열을 자르는 String#truncate_words가 도입되었습니다. (Pull Request)

  • 키는 그대로 두고 해시의 값만 변경해야 하는 일반적인 패턴을 단순화하기 위해 Hash#transform_valuesHash#transform_values!가 추가되었습니다. (Pull Request)

  • humanize 인플레이터 헬퍼가 이제 선행 밑줄을 제거합니다. (Commit)

  • module ClassMethods의 대안으로 Concern#class_methodsKernel#concern 보일러플레이트를 피하는 module Foo; extend ActiveSupport::Concern; end가 도입되었습니다. (Commit)

  • 상수 자동 로드 및 재로드에 대한 새로운 가이드가 추가되었습니다.

크레딧

Rails에 많은 시간을 투자하여 안정적이고 강력한 프레임워크로 만든 모든 기여자의 전체 목록을 참조하십시오. 모든 분들께 박수를 보냅니다.