edge
더 많은 정보: rubyonrails.org에서 확인하세요: 더 많은 Ruby on Rails

Ruby on Rails 5.0 릴리스 노트

Rails 5.0의 주요 기능:

이 릴리스 노트는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 주요 Rails 저장소의 커밋 목록을 확인하십시오.

1 Rails 5.0으로 업그레이드하기

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

2 주요 기능

2.1 Action Cable

Action Cable은 Rails 5에서 새로운 프레임워크입니다. 이는 WebSockets을 Rails 애플리케이션의 나머지 부분과 매끄럽게 통합합니다.

Action Cable은 실시간 기능을 Ruby로 작성할 수 있도록 해주며, Rails 애플리케이션의 나머지 부분과 동일한 스타일과 형식으로 작성됩니다. 동시에 성능과 확장성을 유지합니다. 이는 클라이언트 측 JavaScript 프레임워크와 서버 측 Ruby 프레임워크를 모두 제공하는 풀 스택 오퍼링입니다. Active Record나 선택한 ORM으로 작성된 전체 도메인 모델에 액세스할 수 있습니다.

자세한 내용은 Action Cable 개요 가이드를 참조하십시오.

2.2 API 애플리케이션

Rails를 사용하여 API 전용 애플리케이션을 만들 수 있습니다. 이는 Twitter 또는 GitHub API와 유사한 공개 및 사용자 정의 애플리케이션을 제공하는 데 유용합니다.

다음 명령을 사용하여 새로운 API Rails 앱을 생성할 수 있습니다:

$ rails new my_api --api

이는 주로 브라우저 애플리케이션에 유용한 미들웨어를 기본적으로 포함하지 않도록 애플리케이션을 구성합니다.

  • ApplicationControllerActionController::API에서 상속하도록 설정합니다. 마찬가지로, 이는 브라우저 애플리케이션에서 주로 사용되는 기능을 제공하는 Action Controller 모듈을 제외합니다.
  • 새로운 리소스를 생성할 때 뷰, 헬퍼 및 에셋을 생성하지 않도록 생성기를 구성합니다.

이 애플리케이션은 API를 위한 기본 기능을 제공하며, 애플리케이션의 요구에 맞게 기능을 구성할 수 있습니다. 더 많은 정보를 위해 API 전용 애플리케이션을 위한 Rails 사용 가이드를 참조하십시오.

2.3 Active Record 속성 API

모델에 타입이 지정된 속성을 정의합니다. 필요한 경우 기존 속성의 타입을 무시합니다. 이를 통해 모델에 할당될 때 SQL로 값이 변환되고 변환되는 방식을 제어할 수 있습니다. 또한 ActiveRecord::Base.where에 전달되는 값의 동작을 변경하여 Active Record의 많은 부분에서 도메인 객체를 사용할 수 있게 해줍니다. 구현 세부 정보나 몽키패칭에 의존하지 않고도 사용할 수 있습니다.

이를 통해 달성할 수 있는 몇 가지 사항:

  • Active Record에서 감지한 타입을 무시할 수 있습니다.
  • 기본값을 제공할 수도 있습니다.
  • 속성은 데이터베이스 열로 백업되지 않아도 됩니다.
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# 이전
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # 사용자 정의 타입
  attribute :my_string, :string, default: "new default" # 기본값
  attribute :my_default_proc, :datetime, default: -> { Time.now } # 기본값
  attribute :field_without_db_column, :integer, array: true
end

# 이후
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

사용자 정의 타입 생성:

값 타입에 정의된 메서드에 응답하는 한 사용자 정의 타입을 정의할 수 있습니다. deserialize 또는 cast 메서드는 타입 객체에 대해 호출되며, 데이터베이스나 컨트롤러에서의 원시 입력을 사용합니다. 예를 들어 Money 데이터와 같은 사용자 정의 변환을 수행할 때 유용합니다.

쿼리:

ActiveRecord::Base.where가 호출될 때, 모델 클래스에서 정의된 타입을 사용하여 값을 SQL로 변환하며, 타입 객체에 대해 serialize 메서드를 호출합니다.

이를 통해 객체는 SQL 쿼리를 수행할 때 값을 변환하는 방법을 지정할 수 있습니다.

Dirty Tracking:

속성의 타입은 Dirty Tracking이 수행되는 방식을 변경할 수 있습니다.

자세한 내용은 문서를 참조하십시오.

2.4 테스트 실행기

Rails에서 테스트를 실행하는 기능을 향상시키기 위해 새로운 테스트 실행기가 도입되었습니다. 이 테스트 실행기를 사용하려면 bin/rails test를 입력하면 됩니다.

테스트 실행기는 RSpec, minitest-reporters, maxitest 등을 참고하여 개발되었습니다. 다음과 같은 주요 개선 사항을 포함하고 있습니다:

  • 테스트의 줄 번호를 사용하여 단일 테스트를 실행합니다.
  • 테스트의 줄 번호를 지정하여 여러 테스트를 실행합니다.
  • 실패 메시지를 개선하여 실패한 테스트를 다시 실행하기 쉽게 합니다.
  • -f 옵션을 사용하여 실패 발생 시 테스트를 즉시 중단하고 전체 테스트 스위트를 기다리지 않습니다.
  • -d 옵션을 사용하여 전체 테스트 실행이 완료될 때까지 테스트 출력을 연기합니다.
  • -b 옵션을 사용하여 완전한 예외 백트레이스 출력을 제공합니다.
  • minitest와 통합하여 -s 옵션으로 테스트 시드 데이터, -n 옵션으로 특정 테스트 이름으로 실행, -v 옵션으로 더 나은 상세 출력 등의 옵션을 사용할 수 있습니다.
  • 컬러로 구분된 테스트 출력. Railties --------

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

2.5 제거 사항

  • 디버거 지원이 제거되었습니다. 대신 byebug를 사용하십시오. debugger는 Ruby 2.2에서 지원되지 않습니다. (commit)

  • test:alltest:all:db 작업이 폐기되었습니다. (commit)

  • Rails::Rack::LogTailer가 폐기되었습니다. (commit)

  • RAILS_CACHE 상수가 폐기되었습니다. (commit)

  • serve_static_assets 구성이 폐기되었습니다. (commit)

  • doc:app, doc:rails, doc:guides 문서 작업이 제거되었습니다. (commit)

  • 기본 스택에서 Rack::ContentLength 미들웨어가 제거되었습니다. (Commit)

2.6 폐기 사항

  • config.static_cache_controlconfig.public_file_server.headers를 사용하도록 폐기되었습니다. (Pull Request)

  • config.serve_static_filesconfig.public_file_server.enabled를 사용하도록 폐기되었습니다. (Pull Request)

  • rails 작업 네임스페이스의 작업들이 app 네임스페이스를 사용하도록 폐기되었습니다. (예: rails:updaterails:template 작업은 app:updateapp:template로 이름이 변경되었습니다.) (Pull Request)

2.7 주목할만한 변경 사항

  • Rails 테스트 러너 bin/rails test가 추가되었습니다. (Pull Request)

  • 새로 생성된 애플리케이션 및 플러그인은 Markdown 형식의 README.md를 가지게 됩니다. (commit, Pull Request)

  • bin/rails restart 작업이 추가되어 tmp/restart.txt를 터치하여 Rails 앱을 다시 시작할 수 있습니다. (Pull Request)

  • bin/rails initializers 작업이 추가되어 Rails에 의해 호출되는 모든 정의된 초기화 파일을 순서대로 출력합니다. (Pull Request)

  • 개발 모드에서 캐싱을 활성화 또는 비활성화하기 위해 bin/rails dev:cache가 추가되었습니다. (Pull Request)

  • 개발 환경을 자동으로 업데이트하기 위해 bin/update 스크립트가 추가되었습니다. (Pull Request)

  • Rake 작업을 bin/rails를 통해 프록시합니다. (Pull Request, Pull Request)

  • 새로운 애플리케이션은 Linux 및 macOS에서 이벤트 기반 파일 시스템 모니터를 활성화합니다. 이 기능은 생성기에 --skip-listen을 전달하여 선택적으로 사용하지 않을 수 있습니다. (commit, commit)

  • 새로운 앱에서 환경 변수 RAILS_LOG_TO_STDOUT를 사용하여 프로덕션에서 STDOUT로 로그를 기록할 수 있습니다. (Pull Request)

  • 새로운 애플리케이션에 대해 IncludeSubdomains 헤더와 함께 HSTS를 활성화합니다. (Pull Request)

  • 애플리케이션 생성기는 Spring이 추가로 감시할 일반 파일을 알려주는 config/spring.rb 파일을 작성합니다. (commit)

  • 새로운 앱을 생성할 때 Action Mailer를 건너뛰기 위해 --skip-action-mailer를 추가했습니다. (Pull Request)

  • tmp/sessions 디렉토리와 관련된 clear rake 작업이 제거되었습니다. (Pull Request)

  • 스캐폴드 생성기에 의해 생성된 _form.html.erb가 로컬 변수를 사용하도록 변경되었습니다. (Pull Request)

  • 프로덕션 환경에서 클래스의 자동로딩이 비활성화되었습니다. (commit)

3 Action Pack

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

3.1 제거 사항

  • ActionDispatch::Request::Utils.deep_munge가 제거되었습니다. (commit)

  • ActionController::HideActions가 제거되었습니다. (Pull Request)

  • respond_torespond_with 플레이스홀더 메서드가 제거되었습니다. 이 기능은 responders 젬으로 이동되었습니다. (commit)

  • 폐기된 어설션 파일이 제거되었습니다. (commit)

  • URL 헬퍼에서 문자열 키 사용이 폐기되었습니다. (commit)

  • *_path 헬퍼의 only_path 옵션 사용이 폐기되었습니다. (commit)

  • NamedRouteCollection#helpers를 삭제했습니다. (커밋)

  • :to 옵션에 #이 없는 라우트 정의를 지원하는 기능을 삭제했습니다. (커밋)

  • ActionDispatch::Response#to_ary를 삭제했습니다. (커밋)

  • ActionDispatch::Request#deep_munge를 삭제했습니다. (커밋)

  • ActionDispatch::Http::Parameters#symbolized_path_parameters를 삭제했습니다. (커밋)

  • 컨트롤러 테스트에서 use_route 옵션을 삭제했습니다. (커밋)

  • assignsassert_template를 삭제했습니다. 두 메서드는 rails-controller-testing 젬으로 이동되었습니다. (풀 리퀘스트)

3.2 폐기 예정 기능

  • *_filter 콜백을 *_action 콜백으로 대체하기 위해 모든 콜백을 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • 통합 테스트 메서드인 *_via_redirect을 폐기 예정으로 지정했습니다. 동일한 동작을 위해 요청 호출 후 수동으로 follow_redirect!를 사용하세요. (풀 리퀘스트)

  • AbstractController#skip_action_callback을 개별 skip_callback 메서드로 대체하기 위해 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • render 메서드의 :nothing 옵션을 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • head 메서드의 첫 번째 매개변수로 Hash를 전달하고 기본 상태 코드를 사용하는 것을 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • 미들웨어 클래스 이름에 대해 문자열이나 심볼을 사용하는 것을 폐기 예정으로 지정했습니다. 대신 클래스 이름을 사용하세요. (커밋)

  • MIME 유형에 상수를 통해 접근하는 것을 폐기 예정으로 지정했습니다. 대신 심볼과 첨자 연산자를 사용하세요 (예: Mime[:html]). (풀 리퀘스트)

  • redirect_to :backRedirectBackError의 가능성을 제거하기 위해 필수 fallback_location 인수를 받는 redirect_back으로 대체했습니다. (풀 리퀘스트)

  • ActionDispatch::IntegrationTestActionController::TestCase에서 위치 매개변수를 키워드 인수로 대체하기 위해 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • :controller:action 경로 매개변수를 폐기 예정으로 지정했습니다. (풀 리퀘스트)

  • 컨트롤러 인스턴스에서 env 메서드를 폐기 예정으로 지정했습니다. (커밋)

  • ActionDispatch::ParamsParser를 폐기 예정으로 지정하고 미들웨어 스택에서 제거했습니다. 파라미터 파서를 구성하기 위해 ActionDispatch::Request.parameter_parsers=를 사용하세요. (커밋, 커밋)

3.3 주목할만한 변경 사항

  • 임의의 템플릿을 컨트롤러 액션 외부에서 렌더링하기 위해 ActionController::Renderer를 추가했습니다. (풀 리퀘스트)

  • ActionController::TestCaseActionDispatch::Integration HTTP 요청 메서드에서 키워드 인수 구문으로 마이그레이션했습니다. (풀 리퀘스트)

  • 만료되지 않는 응답을 캐시하기 위해 http_cache_forever를 Action Controller에 추가했습니다. (풀 리퀘스트)

  • 요청 변형에 더 쉽게 접근할 수 있도록 지원했습니다. (풀 리퀘스트)

  • 해당 템플릿이 없는 액션에 대해 에러를 발생시키는 대신 head :no_content를 렌더링하도록 변경했습니다. (풀 리퀘스트)

  • 컨트롤러에 대한 기본 폼 빌더를 재정의할 수 있는 기능을 추가했습니다. (풀 리퀘스트)

  • API 전용 앱을 지원하기 위해 ActionController::API를 추가했습니다. 이러한 종류의 애플리케이션을 위한 ActionController::Base의 대체제로 사용됩니다. (풀 리퀘스트)

  • ActionController::Parameters가 더 이상 HashWithIndifferentAccess를 상속하지 않도록 변경했습니다. (풀 리퀘스트)

  • config.force_sslconfig.ssl_options를 쉽게 활성화하고 비활성화할 수 있도록 변경했습니다. (풀 리퀘스트)

  • ActionDispatch::Static에 임의의 헤더를 반환할 수 있는 기능을 추가했습니다. (풀 리퀘스트)

  • protect_from_forgery의 기본값을 prepend에서 false로 변경했습니다. (커밋)

  • ActionController::TestCase는 Rails 5.1에서 자체 젬으로 이동될 예정입니다. 대신 ActionDispatch::IntegrationTest를 사용하십시오. (커밋)

  • Rails는 기본적으로 약한 ETag를 생성합니다. (풀 리퀘스트)

  • 명시적인 render 호출이 없고 해당하는 템플릿이 없는 컨트롤러 액션은 오류를 발생시키지 않고 암묵적으로 head :no_content를 렌더링합니다. (풀 리퀘스트 1, 2)

  • 폼별 CSRF 토큰을 전달하기 위한 옵션을 추가했습니다. (풀 리퀘스트)

  • 통합 테스트에 요청 인코딩 및 응답 파싱 기능을 추가했습니다. (풀 리퀘스트)

  • ActionController#helpers를 추가하여 컨트롤러 수준에서 뷰 컨텍스트에 액세스할 수 있습니다. (풀 리퀘스트)

  • 삭제된 플래시 메시지는 세션에 저장되기 전에 제거됩니다. (풀 리퀘스트)

  • fresh_whenstale?에 레코드 컬렉션을 전달할 수 있는 지원을 추가했습니다. (풀 리퀘스트)

  • ActionController::LiveActiveSupport::Concern이 되었습니다. 이는 다른 모듈에 포함되기 위해서는 ActiveSupport::Concern 또는 ActionController::Live로 확장해야 한다는 것을 의미합니다. 일부 사람들은 미들웨어가 ActionController::Live를 사용할 때 발생하는 스레드에서 :warden를 잡을 수 없기 때문에 특별한 Warden/Devise 인증 실패 처리 코드를 포함하기 위해 다른 모듈을 사용할 수도 있습니다. (이 이슈에서 자세한 내용 확인)

  • Response#strong_etag=#weak_etag=fresh_whenstale?에 대한 유사한 옵션을 도입했습니다. (풀 리퀘스트)

4 Action View

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

4.1 삭제된 내용

  • 폐기된 AbstractController::Base::parent_prefixes를 제거했습니다. (커밋)

  • ActionView::Helpers::RecordTagHelper를 제거했습니다. 이 기능은 record_tag_helper 젬으로 분리되었습니다. (풀 리퀘스트)

  • 더 이상 I18n에서 지원하지 않는 translate 헬퍼의 :rescue_format 옵션을 제거했습니다. (풀 리퀘스트)

4.2 주요 변경 사항

  • 기본 템플릿 핸들러를 ERB에서 Raw로 변경했습니다. (커밋)

  • 컬렉션 렌더링은 여러 개의 부분 템플릿을 캐시하고 한 번에 가져올 수 있습니다. (풀 리퀘스트, 커밋)

  • 명시적 종속성에 와일드카드 매칭을 추가했습니다. (풀 리퀘스트)

  • 제출 태그에 대한 기본 동작으로 disable_with를 사용합니다. 제출 시 버튼을 비활성화하여 중복 제출을 방지합니다. (풀 리퀘스트)

  • 부분 템플릿 이름은 더 이상 유효한 Ruby 식별자일 필요가 없습니다. (커밋)

  • datetime_tag 헬퍼는 이제 datetime-local 타입의 입력 태그를 생성합니다. (풀 리퀘스트)

  • render partial: 헬퍼로 렌더링하는 동안 블록을 허용합니다. (풀 리퀘스트)

5 Action Mailer

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

5.1 삭제된 내용

  • 이메일 뷰에서 폐기된 *_path 헬퍼를 제거했습니다. (커밋)

  • 폐기된 deliverdeliver! 메서드를 제거했습니다. (커밋)

5.2 주요 변경 사항

  • 템플릿 조회는 이제 기본 로캘과 I18n 폴백을 준수합니다. (커밋)

  • 생성기를 통해 생성된 메일러에 _mailer 접미사를 추가했습니다. 이는 컨트롤러와 작업에서 사용되는 네이밍 컨벤션을 따릅니다. (풀 리퀘스트)

  • assert_enqueued_emailsassert_no_enqueued_emails를 추가했습니다. (Pull Request)

  • config.action_mailer.deliver_later_queue_name 구성을 추가하여 메일러 큐 이름을 설정할 수 있습니다. (Pull Request)

  • Action Mailer 뷰에서 조각 캐싱을 지원하도록 추가했습니다. 템플릿이 캐싱을 수행할지 여부를 결정하기 위해 config.action_mailer.perform_caching이라는 새로운 구성 옵션을 추가했습니다. (Pull Request)

6 Active Record

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

6.1 제거 사항

  • 중첩된 배열을 쿼리 값으로 전달하는 것을 허용하는 더 이상 사용되지 않는 동작을 제거했습니다. (Pull Request)

  • 더 이상 사용되지 않는 ActiveRecord::Tasks::DatabaseTasks#load_schema를 제거했습니다. 이 메서드는 ActiveRecord::Tasks::DatabaseTasks#load_schema_for로 대체되었습니다. (commit)

  • 더 이상 사용되지 않는 serialized_attributes를 제거했습니다. (commit)

  • has_many :through에서 더 이상 사용되지 않는 자동 카운터 캐시를 제거했습니다. (commit)

  • 더 이상 사용되지 않는 sanitize_sql_hash_for_conditions를 제거했습니다. (commit)

  • 더 이상 사용되지 않는 Reflection#source_macro를 제거했습니다. (commit)

  • 더 이상 사용되지 않는 symbolized_base_classsymbolized_sti_name을 제거했습니다. (commit)

  • 더 이상 사용되지 않는 ActiveRecord::Base.disable_implicit_join_references=를 제거했습니다. (commit)

  • 문자열 접근자를 사용하여 연결 사양에 액세스하는 것을 더 이상 지원하지 않습니다. (commit)

  • 인스턴스 종속적인 연관 관계를 미리로드하는 것을 더 이상 지원하지 않습니다. (commit)

  • 배타적 하한 값을 가진 PostgreSQL 범위를 더 이상 지원하지 않습니다. (commit)

  • 캐시된 Arel로 관계를 수정할 때 deprecation을 제거했습니다. 대신 ImmutableRelation 오류가 발생합니다. (commit)

  • ActiveRecord::Serialization::XmlSerializer를 코어에서 제거했습니다. 이 기능은 activemodel-serializers-xml 젬으로 분리되었습니다. (Pull Request)

  • 코어에서 레거시 mysql 데이터베이스 어댑터 지원을 제거했습니다. 대부분의 사용자는 mysql2를 사용할 수 있습니다. 유지 관리자를 찾으면 별도의 젬으로 변환될 것입니다. (Pull Request 1, Pull Request 2)

  • protected_attributes 젬 지원을 제거했습니다. (commit)

  • PostgreSQL 9.1 버전 미만의 지원을 제거했습니다. (Pull Request)

  • activerecord-deprecated_finders 젬 지원을 제거했습니다. (commit)

  • ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES 상수를 제거했습니다. (commit)

6.2 폐기 사항

  • 쿼리 값으로 클래스를 전달하는 것을 폐기했습니다. 대신 문자열을 전달해야 합니다. (Pull Request)

  • Active Record 콜백 체인을 중단하는 방법으로 false를 반환하는 것을 폐기했습니다. 권장하는 방법은 throw(:abort)입니다. (Pull Request)

  • ActiveRecord::Base.errors_in_transactional_callbacks=을 폐기했습니다. (commit)

  • Relation#uniq를 사용하는 대신 Relation#distinct를 사용하도록 폐기했습니다. (commit)

  • PostgreSQL :point 타입을 새로운 타입으로 폐기했습니다. 이 새로운 타입은 Array 대신 Point 객체를 반환합니다. (Pull Request)

  • 연관 관계 메서드에 참값 인수를 전달하여 강제로 연관 관계를 다시로드하는 것을 폐기했습니다. (Pull Request)

  • 연관 관계 restrict_dependent_destroy 오류의 키를 새로운 키 이름으로 폐기했습니다. (Pull Request)

  • #tables의 동작을 동기화했습니다. (Pull Request)

  • SchemaCache#tables, SchemaCache#table_exists?, SchemaCache#clear_table_cache!를 폐기하고 새로운 데이터 소스 대안을 사용하도록 폐기했습니다. (Pull Request)

  • SQLite3 및 MySQL 어댑터에서 connection.tables를 폐기했습니다. (Pull Request)

  • #tables에 인수를 전달하는 것을 폐기했습니다. 일부 어댑터(mysql2, sqlite3)의 #tables 메서드는 테이블과 뷰를 모두 반환하는 반면 다른 어댑터(postgresql)는 테이블만 반환합니다. 동작을 일관되게 만들기 위해 #tables은 향후에는 테이블만 반환합니다. (Pull Request)

  • table_exists?를 사용하지 않도록 하였습니다. #table_exists? 메소드는 향후에는 테이블만 확인하도록 변경되었습니다. (Pull Request)

  • find_nthoffset 인자를 전달하는 것을 사용하지 않도록 하였습니다. 대신 관계에 있는 offset 메소드를 사용해주세요. (Pull Request)

  • DatabaseStatements에서 {insert|update|delete}_sql을 사용하지 않도록 하였습니다. 대신 {insert|update|delete} 공개 메소드를 사용해주세요. (Pull Request)

  • use_transactional_fixtures를 더 명확한 use_transactional_tests로 대체하였습니다. (Pull Request)

  • ActiveRecord::Connection#quote에 컬럼을 전달하는 것은 사용하지 않도록 하였습니다. (commit)

  • find_in_batchesend 옵션을 추가하여 배치 처리를 중지할 위치를 지정할 수 있도록 하였습니다. (Pull Request)

6.3 주요 변경 사항

  • 테이블을 생성할 때 referencesforeign_key 옵션을 추가하였습니다. (commit)

  • 새로운 속성 API를 추가하였습니다. (commit)

  • enum 정의에 :_prefix/:_suffix 옵션을 추가하였습니다. (Pull Request, Pull Request)

  • ActiveRecord::Relation#cache_key를 추가하였습니다. (Pull Request)

  • timestamps의 기본 null 값이 false로 변경되었습니다. (commit)

  • ActiveRecord::SecureToken을 추가하여 SecureRandom을 사용하여 모델의 속성에 대한 고유한 토큰 생성을 캡슐화하였습니다. (Pull Request)

  • drop_table:if_exists 옵션을 추가하였습니다. (Pull Request)

  • ActiveRecord::Base#accessed_fields를 추가하였습니다. 이를 사용하여 데이터베이스에서 필요한 데이터만 선택할 때 모델에서 읽은 필드를 빠르게 확인할 수 있습니다. (commit)

  • ActiveRecord::Relation#or 메소드를 추가하였습니다. WHERE 또는 HAVING 절을 결합하는 데 OR 연산자를 사용할 수 있습니다. (commit)

  • ActiveRecord::Base.suppress를 추가하였습니다. 이를 사용하여 주어진 블록 내에서 수신자를 저장하지 않도록 할 수 있습니다. (Pull Request)

  • belongs_to는 이제 기본적으로 연관된 객체가 없을 경우 유효성 오류를 발생시킵니다. optional: true로 개별 연관 관계에서 이를 비활성화할 수 있습니다. 또한 required 옵션을 optional 옵션으로 대체하여 belongs_to에 대한 사용을 비추합니다. (Pull Request)

  • config.active_record.dump_schemas를 추가하여 db:structure:dump의 동작을 구성할 수 있도록 하였습니다. (Pull Request)

  • config.active_record.warn_on_records_fetched_greater_than 옵션을 추가하였습니다. (Pull Request)

  • MySQL에서 네이티브 JSON 데이터 타입 지원을 추가하였습니다. (Pull Request)

  • PostgreSQL에서 동시에 인덱스를 삭제할 수 있는 기능을 추가하였습니다. (Pull Request)

  • 연결 어댑터에 #views#view_exists? 메소드를 추가하였습니다. (Pull Request)

  • ActiveRecord::Base.ignored_columns를 추가하여 일부 컬럼을 Active Record에서 숨길 수 있도록 하였습니다. (Pull Request)

  • connection.data_sourcesconnection.data_source_exists?를 추가하였습니다. 이 메소드들은 Active Record 모델을 지원하는 관계(일반적으로 테이블과 뷰)를 결정합니다. (Pull Request)

  • 픽스처 파일에서 YAML 파일 자체에서 모델 클래스를 설정할 수 있도록 하였습니다. (Pull Request)

  • 데이터베이스 마이그레이션 생성 시 기본적으로 uuid를 기본 키로 설정할 수 있도록 하였습니다. (Pull Request)

  • ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joins를 추가했습니다. (Pull Request)

  • after_{create,update,delete}_commit 콜백을 추가했습니다. (Pull Request)

  • 마이그레이션 클래스에 제공되는 API를 버전화하여 기존 마이그레이션을 깨뜨리지 않고 매개변수 기본값을 변경하거나 사용자에게 재작성을 강요할 수 있도록 했습니다. (Pull Request)

  • ApplicationRecord는 모든 앱 모델의 새로운 슈퍼클래스로, 앱 컨트롤러가 ActionController::Base 대신 ApplicationController를 상속하는 것과 유사합니다. 이를 통해 앱에서 앱 전체 모델 동작을 구성할 수 있는 단일한 위치를 제공합니다. (Pull Request)

  • ActiveRecord #second_to_last#third_to_last 메서드를 추가했습니다. (Pull Request)

  • PostgreSQL 및 MySQL의 데이터베이스 메타데이터에 저장된 주석으로 데이터베이스 객체(테이블, 열, 인덱스)에 주석을 추가하는 기능을 추가했습니다. (Pull Request)

  • mysql2 어댑터에 준비된 문 지원을 추가했습니다. 이전에는 폐기된 mysql 레거시 어댑터에서만 지원되었습니다. 활성화하려면 config/database.yml에서 prepared_statements: true로 설정하십시오. (Pull Request)

  • 관계 객체에서 ActionRecord::Relation#update를 호출할 수 있는 기능을 추가했습니다. 이는 관계에 있는 모든 객체에서 유효성 검사와 콜백을 실행합니다. (Pull Request)

  • save 메서드에 :touch 옵션을 추가하여 타임스탬프를 업데이트하지 않고 레코드를 저장할 수 있도록 했습니다. (Pull Request)

  • PostgreSQL에 대한 표현식 인덱스와 연산자 클래스 지원을 추가했습니다. (commit)

  • 중첩된 속성의 오류에 인덱스를 추가하는 :index_errors 옵션을 추가했습니다. (Pull Request)

  • 양방향 삭제 종속성을 지원하도록 추가했습니다. (Pull Request)

  • 트랜잭션 테스트에서 after_commit 콜백을 지원하도록 추가했습니다. (Pull Request)

  • 테이블에 외래 키가 있는지 여부를 확인하기 위해 foreign_key_exists? 메서드를 추가했습니다. (Pull Request)

  • :time 옵션을 touch 메서드에 추가하여 현재 시간과 다른 시간으로 레코드를 업데이트할 수 있도록 했습니다. (Pull Request)

  • 트랜잭션 콜백을 변경하여 오류를 더 이상 무시하지 않도록 변경했습니다. 이 변경 전에는 트랜잭션 콜백 내에서 발생한 모든 오류가 로그에 기록되었습니다. (raise_in_transactional_callbacks = true 옵션을 사용하지 않는 한) 이제 이러한 오류는 더 이상 잡히지 않고 상위로 전달되며 다른 콜백과 동일한 동작을 수행합니다. (commit)

7 Active Model

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

7.1 삭제 사항

  • ActiveModel::Dirty#reset_#{attribute}ActiveModel::Dirty#reset_changes를 폐기했습니다. (Pull Request)

  • XML 직렬화를 제거했습니다. 이 기능은 activemodel-serializers-xml 젬으로 분리되었습니다. (Pull Request)

  • ActionController::ModelNaming 모듈을 제거했습니다. (Pull Request)

7.2 폐기 사항

  • Active Model 및 ActiveModel::Validations 콜백 체인을 중단하는 방법으로 false를 반환하는 것을 폐기했습니다. 권장하는 방법은 throw(:abort)입니다. (Pull Request)

  • 일관성 없는 동작을 가진 ActiveModel::Errors#get, ActiveModel::Errors#setActiveModel::Errors#[]= 메서드를 폐기했습니다. (Pull Request)

  • validates_length_of:tokenizer 옵션을 폐기했습니다. 대신 일반적인 Ruby를 사용하십시오. (Pull Request)

  • ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank를 사용하지 않도록 표시되었습니다. 대체할 기능은 없습니다. (풀 리퀘스트)

7.3 주요 변경 사항

  • ActiveModel::Errors#details를 추가하여 어떤 유효성 검사기가 실패했는지 확인할 수 있습니다. (풀 리퀘스트)

  • ActiveRecord::AttributeAssignmentActiveModel::AttributeAssignment로 추출하여 모든 객체에 포함 가능한 모듈로 사용할 수 있게 되었습니다. (풀 리퀘스트)

  • ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change를 추가하여 모델이 저장된 후에 기록된 변경 사항에 더 쉽게 액세스할 수 있게 되었습니다. (풀 리퀘스트)

  • valid?invalid?에서 여러 컨텍스트를 동시에 유효성 검사할 수 있게 되었습니다. (풀 리퀘스트)

  • validates_acceptance_of1 외에도 true를 기본값으로 허용하도록 변경되었습니다. (풀 리퀘스트)

8 Active Job

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

8.1 주요 변경 사항

  • ActiveJob::Base.deserialize는 작업 클래스로 위임됩니다. 이를 통해 작업이 직렬화될 때 임의의 메타데이터를 첨부하고 수행될 때 다시 읽을 수 있습니다. (풀 리퀘스트)

  • 각 작업에 대해 큐 어댑터를 개별적으로 구성할 수 있는 기능이 추가되었습니다. (풀 리퀘스트)

  • 생성된 작업은 이제 기본적으로 app/jobs/application_job.rb에서 상속됩니다. (풀 리퀘스트)

  • DelayedJob, Sidekiq, qu, que, queue_classic에서 작업 ID를 ActiveJob::Baseprovider_job_id로 보고할 수 있도록 변경되었습니다. (풀 리퀘스트, 풀 리퀘스트, 커밋)

  • concurrent-ruby 스레드 풀에 작업을 대기열에 넣는 간단한 AsyncJob 프로세서와 관련된 AsyncAdapter를 구현했습니다. (풀 리퀘스트)

  • 기본 어댑터를 인라인에서 비동기로 변경했습니다. 이는 테스트가 동기적으로 발생하는 동작에 실수로 의존하지 않도록 더 나은 기본값입니다. (커밋)

9 Active Support

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

9.1 제거된 기능

  • 더 이상 사용되지 않는 ActiveSupport::JSON::Encoding::CircularReferenceError가 제거되었습니다. (커밋)

  • 더 이상 사용되지 않는 메서드 ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_string가 제거되었습니다. (커밋)

  • 더 이상 사용되지 않는 ActiveSupport::SafeBuffer#prepend가 제거되었습니다. (커밋)

  • Kernel에서 더 이상 사용되지 않는 메서드 silence_stderr, silence_stream, capture, quietly가 제거되었습니다. (커밋)

  • 더 이상 사용되지 않는 active_support/core_ext/big_decimal/yaml_conversions 파일이 제거되었습니다. (커밋)

  • 더 이상 사용되지 않는 메서드 ActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument=가 제거되었습니다. (커밋)

  • Class#superclass_delegating_accessor가 제거되었습니다. 대신 Class#class_attribute를 사용하십시오. (풀 리퀘스트)

  • ThreadSafe::Cache가 제거되었습니다. 대신 Concurrent::Map을 사용하십시오. (풀 리퀘스트)

  • Ruby 2.2에서 구현된 Object#itself가 제거되었습니다. (풀 리퀘스트)

9.2 사용 중단된 기능

  • MissingSourceFileLoadError를 대신하여 사용 중단되었습니다. (커밋)

  • alias_method_chain이 Ruby 2.0에서 도입된 Module#prepend를 사용하여 사용 중단되었습니다. (풀 리퀘스트)

  • ActiveSupport::Concurrency::LatchConcurrent::CountDownLatch로 사용 중단되었습니다. (풀 리퀘스트)

  • number_to_human_size:prefix 옵션이 사용 중단되었습니다. 대체 기능은 없습니다. (풀 리퀘스트)

  • Module#qualified_const_가 내장된 Module#const_ 메서드를 사용하도록 사용 중단되었습니다. (풀 리퀘스트)

  • 문자열을 콜백으로 정의하는 것이 사용 중단되었습니다. (풀 리퀘스트)

  • ActiveSupport::Cache::Store#namespaced_key, ActiveSupport::Cache::MemCachedStore#escape_key, ActiveSupport::Cache::FileStore#key_file_path가 사용 중단되었습니다. normalize_key를 사용하십시오. (풀 리퀘스트, 커밋)

  • ActiveSupport::Cache::LocaleCache#set_cache_valuewrite_cache_value로 사용 중단되었습니다. (풀 리퀘스트)

  • assert_nothing_raised에 대한 인수 전달은 사용이 중지되었습니다. (Pull Request)

  • Module.local_constantsModule.constants(false)를 선호합니다. (Pull Request)

9.3 주요 변경 사항

  • ActiveSupport::MessageVerifier#verified#valid_message? 메서드를 추가했습니다. (Pull Request)

  • 콜백 체인을 중단하는 방법이 변경되었습니다. 이제 콜백 체인을 중단하는 우선적인 방법은 명시적으로 throw(:abort)하는 것입니다. (Pull Request)

  • config.active_support.halt_callback_chains_on_return_false라는 새로운 구성 옵션을 추가하여 ActiveRecord, ActiveModel 및 ActiveModel::Validations 콜백 체인이 'before' 콜백에서 false를 반환하여 중단될 수 있는지 여부를 지정할 수 있습니다. (Pull Request)

  • 기본 테스트 순서를 :sorted에서 :random으로 변경했습니다. (commit)

  • Date, TimeDateTime#on_weekend?, #on_weekday?, #next_weekday, #prev_weekday 메서드를 추가했습니다. (Pull Request, Pull Request)

  • Date, Time, DateTime#next_week#prev_weeksame_time 옵션을 추가했습니다. (Pull Request)

  • Date, Time, DateTime#yesterday#tomorrow#prev_day#next_day 상응하는 메서드를 추가했습니다. (Pull Request)

  • 무작위 base58 문자열을 생성하기 위해 SecureRandom.base58를 추가했습니다. (commit)

  • ActiveSupport::TestCasefile_fixture를 추가했습니다. 이는 테스트 케이스에서 샘플 파일에 액세스하기 위한 간단한 메커니즘을 제공합니다. (Pull Request)

  • 지정된 요소를 제외한 열거 가능한 요소의 복사본을 반환하기 위해 EnumerableArray#without를 추가했습니다. (Pull Request)

  • ActiveSupport::ArrayInquirerArray#inquiry를 추가했습니다. (Pull Request)

  • 특정 시간대에서 시간을 구문 분석할 수 있도록 ActiveSupport::TimeZone#strptime을 추가했습니다. (commit)

  • Integer#zero?와 유사한 Integer#positive?Integer#negative? 쿼리 메서드를 추가했습니다. (commit)

  • ActiveSupport::OrderedOptions get 메서드에 KeyError를 발생시키는 뱅 버전을 추가했습니다. (Pull Request)

  • 주어진 연도의 일 수 또는 인수가 제공되지 않은 경우 현재 연도를 반환하기 위해 Time.days_in_year를 추가했습니다. (commit)

  • 응용 프로그램 소스 코드, 라우트, 로케일 등에서 변경 사항을 비동기적으로 감지하기 위해 이벤트 기반 파일 감시기를 추가했습니다. (Pull Request)

  • 쓰레드별로 유지되는 클래스 및 모듈 변수를 선언하기 위해 thread_m/cattr_accessor/reader/writer 메서드 스위트를 추가했습니다. (Pull Request)

  • Array#second_to_lastArray#third_to_last 메서드를 추가했습니다. (Pull Request)

  • 응용 프로그램 코드의 실행 및 응용 프로그램 다시로드 프로세스에 참여하기 위해 ActiveSupport::ExecutorActiveSupport::Reloader API를 게시했습니다. (Pull Request)

  • ActiveSupport::Duration은 이제 ISO8601 형식 지원 및 구문 분석을 지원합니다. (Pull Request)

  • ActiveSupport::JSON.decodeparse_json_times가 활성화되었을 때 ISO8601 로컬 시간을 구문 분석할 수 있습니다. (Pull Request)

  • ActiveSupport::JSON.decode는 날짜 문자열에 대해 Date 객체를 반환합니다. (Pull Request)

  • TaggedLogging에 여러 번 인스턴스화 할 수 있는 기능을 추가하여 서로 태그를 공유하지 않도록 허용했습니다. (Pull Request)

    크레딧

Rails에 기여한 모든 사람들의 전체 목록을 확인하여 Rails를 안정적이고 견고한 프레임워크로 만들기 위해 많은 시간을 투자한 많은 사람들에게 감사의 인사를 전합니다.

피드백

이 가이드의 품질을 개선하는 데 도움을 주시기를 권장합니다.

오타나 사실적인 오류를 발견하면 기여해주십시오. 시작하려면 문서 기여 섹션을 읽어보세요.

불완전한 내용이나 최신 정보가 아닌 내용을 발견할 수도 있습니다. 주요한 부분에 누락된 문서를 추가해주세요. Edge 가이드에서 이미 문제가 해결되었는지 확인하세요. 스타일과 규칙은 Ruby on Rails 가이드 지침을 확인하세요.

수정할 내용을 발견했지만 직접 수정할 수 없는 경우 이슈를 열어주세요.

마지막으로, Ruby on Rails 문서에 관한 모든 토론은 공식 Ruby on Rails 포럼에서 환영합니다.