Ruby on Rails 5.0 릴리스 노트
Rails 5.0의 주요 기능:
- Action Cable
- Rails API
- Active Record 속성 API
- 테스트 러너
- Rake 대신
rails
CLI 전용 사용 - Sprockets 3
- Turbolinks 5
- Ruby 2.2.2+ 필요
이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 주 저장소에서 커밋 목록을 확인하세요.
Rails 5.0으로 업그레이드하기
기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 4.2로 먼저 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 5.0으로 업그레이드를 시도해야 합니다. Rails 5.0으로 업그레이드할 때 주의해야 할 사항은 “Ruby on Rails 업그레이드” 가이드에서 확인할 수 있습니다.
주요 기능
Action Cable
Action Cable은 Rails 5의 새로운 프레임워크입니다. 이는 WebSockets를 Rails 애플리케이션의 나머지 부분과 seamlessly 통합합니다.
Action Cable을 통해 실시간 기능을 Ruby로 작성할 수 있으며, Rails 애플리케이션의 나머지 부분과 동일한 스타일과 형식으로 작성할 수 있습니다. 동시에 성능과 확장성도 보장됩니다. Action Cable은 클라이언트 측 JavaScript 프레임워크와 서버 측 Ruby 프레임워크를 모두 제공하는 완전한 스택 솔루션입니다. Active Record 또는 선택한 ORM을 통해 작성한 전체 도메인 모델에 액세스할 수 있습니다.
자세한 내용은 “Action Cable 개요” 가이드를 참조하세요.
API 애플리케이션
Rails를 사용하여 슬림화된 API 전용 애플리케이션을 만들 수 있습니다. 이는 Twitter나 GitHub API와 유사한 공개 API 및 사용자 정의 애플리케이션을 제공하는 데 유용합니다.
다음 명령어로 새로운 API Rails 앱을 생성할 수 있습니다:
$ rails new my_api --api
이 명령어는 다음과 같은 3가지 주요 작업을 수행합니다:
- 일반 웹 애플리케이션에 주로 유용한 미들웨어(쿠키 지원 등)를 제외하고 더 제한적인 미들웨어 세트로 애플리케이션을 구성합니다.
ApplicationController
를ActionController::API
에서 상속하도록 변경합니다. 이를 통해 일반 웹 애플리케이션에 주로 사용되는 기능이 제외됩니다.- 새 리소스를 생성할 때 뷰, 헬퍼, 자산 생성을 건너뛰도록 생성기를 구성합니다.
이렇게 생성된 애플리케이션은 API 기반 애플리케이션의 기반이 되며, 필요에 따라 기능을 추가할 수 있습니다.
자세한 내용은 “Rails를 API 전용 애플리케이션에 사용하기” 가이드를 참조하세요.
Active Record 속성 API
모델에 유형이 지정된 속성을 정의할 수 있습니다. 필요한 경우 기존 속성의 유형을 재정의할 수 있습니다.
이를 통해 SQL에 값을 저장하고 불러올 때의 변환을 제어할 수 있습니다.
또한 ActiveRecord::Base.where
에 전달되는 값의 동작을 변경하여, 구현 세부 사항에 의존하거나 monkey patching 없이도 도메인 객체를 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') # before 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 # after 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
메서드로 호출하여 변환할 수 있습니다. 이는 화폐 데이터와 같은 사용자 정의 변환을 수행할 때 유용합니다.
쿼리:
ActiveRecord::Base.where
가 호출되면 모델 클래스에 정의된 유형을 사용하여 값을 SQL로 변환하고, serialize
메서드를 호출합니다.
이를 통해 객체가 SQL 쿼리를 수행할 때 값을 변환하는 방법을 지정할 수 있습니다.
변경 추적:
속성 유형은 변경 추적 동작을 변경할 수 있습니다.
자세한 내용은 문서를 참조하세요.
테스트 러너
Rails에서 테스트를 실행하는 기능을 향상시킨 새로운 테스트 러너가 도입되었습니다.
이 테스트 러너를 사용하려면 bin/rails test
를 입력하면 됩니다.
테스트 러너는 RSpec
, minitest-reporters
, maxitest
등의 영향을 받았습니다.
다음과 같은 주요 기능을 포함합니다:
- 테스트 라인 번호를 사용하여 단일 테스트 실행.
- 테스트 라인 번호를 지정하여 여러 테스트 실행.
- 실패 메시지 개선, 실패한 테스트를 쉽게 다시 실행할 수 있음.
-f
옵션을 사용하여 실패 시 즉시 테스트 중단, 전체 테스트 완료까지 기다리지 않음.-d
옵션을 사용하여 전체 테스트 실행 완료 후 출력 지연.-b
옵션을 사용하여 전체 예외 백트레이스 출력.-s
,-n
,-v
등 minitest 옵션과의 통합.- 컬러 테스트 출력.
Railties
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
디버거 지원 제거, byebug 사용.
debugger
는 Ruby 2.2에서 지원되지 않습니다. (commit)test:all
및test:all:db
작업 제거. (commit)Rails::Rack::LogTailer
제거. (commit)RAILS_CACHE
상수 제거. (commit)serve_static_assets
구성 제거. (commit)doc:app
,doc:rails
,doc:guides
문서 작업 제거. (commit)기본 스택에서
Rack::ContentLength
미들웨어 제거. (Commit)
사용 중단
config.static_cache_control
을config.public_file_server.headers
로 대체. (Pull Request)config.serve_static_files
를config.public_file_server.enabled
로 대체. (Pull Request)rails
작업 네임스페이스의 작업을app
네임스페이스로 대체. (예:rails:update
및rails:template
작업이app:update
및app:template
로 변경됨.) (Pull Request)
주요 변경 사항
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
환경 네, 번역을 계속하겠습니다.RAILS_LOG_TO_STDOUT
환경 변수를 사용하여 프로덕션에서 로그를 STDOUT으로 기록하는 옵션이 추가되었습니다. (Pull Request)새로운 애플리케이션에 IncludeSubdomains 헤더가 포함된 HSTS가 활성화됩니다. (Pull Request)
애플리케이션 생성기가
config/spring.rb
파일을 작성하여 Spring이 추가적인 일반적인 파일을 감시하도록 합니다. (commit)새 앱 생성 시
--skip-action-mailer
옵션을 추가하여 Action Mailer를 건너뛸 수 있습니다. (Pull Request)tmp/sessions
디렉토리와 이와 관련된 clear rake 작업이 제거되었습니다. (Pull Request)scaffold 생성기가 생성하는
_form.html.erb
가 지역 변수를 사용하도록 변경되었습니다. (Pull Request)프로덕션 환경에서 클래스 자동 로드가 비활성화되었습니다. (commit)
Action Pack
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
ActionDispatch::Request::Utils.deep_munge
제거. (commit)ActionController::HideActions
제거. (Pull Request)respond_to
및respond_with
플레이스홀더 메서드 제거, 이 기능은 responders gem으로 추출되었습니다. (commit)deprecated 어설션 파일 제거. (commit)
URL 헬퍼의 문자열 키 사용 deprecated. (commit)
only_path
옵션 사용 deprecated. (commit)NamedRouteCollection#helpers
사용 deprecated. (commit):to
옵션에#
을 포함하지 않는 경로 정의 사용 deprecated. (commit)ActionDispatch::Response#to_ary
사용 deprecated. (commit)ActionDispatch::Request#deep_munge
사용 deprecated. (commit)ActionDispatch::Http::Parameters#symbolized_path_parameters
사용 deprecated. (commit)컨트롤러 테스트에서
use_route
옵션 사용 deprecated. (commit)assigns
및assert_template
제거. 두 메서드 모두 rails-controller-testing gem으로 추출되었습니다. (Pull Request)
사용 중단
모든
*_filter
콜백을*_action
콜백으로 대체. (Pull Request)*_via_redirect
통합 테스트 메서드 사용 중단. 대신 요청 호출 후follow_redirect!
를 수동으로 사용하세요. (Pull Request)개별 skipcallback 메서드로 `AbstractController#skipaction_callback` 사용 중단. (Pull Request)
render
메서드의:nothing
옵션 사용 중단. (Pull Request)head
메서드의 첫 번째 매개변수로Hash
를 전달하고 기본 상태 코드를 사용하는 것 사용 중단. (Pull Request)문자열이나 기호로 미들웨어 클래스 이름을 사용하는 것 사용 중단. 대신 클래스 이름을 사용하세요. (commit)
MIME 유형에 대한 상수 액세스(예:
Mime::HTML
) 사용 중단. 대신 기호 연산자(예:Mime[:html]
)를 사용하세요. (Pull Request)redirect_to :back
를redirect_back
으로 대체.redirect_back
은 필수fallback_location
인수를 받아RedirectBackError
가 발생할 가능성을 제거합니다. (Pull Request)ActionDispatch::IntegrationTest
및ActionController::TestCase
에서 위치 인수 대신 키워드 인수 사용. (Pull Request):controller
및:action
경로 매개변수 사용 중단. (Pull Request)컨트롤러 인스턴스의
env
메서드 사용 중단. (commit)ActionDispatch::ParamsParser
가 사용 중단되었고 미들웨어 스택에서 제거되었습니다. 매개변수 파서를 구성하려면ActionDispatch::Request.parameter_parsers=
를 사용하세요. (commit, commit)
주요 변경 사항
컨트롤러 작업 외부에서 임의의 템플릿을 렌더링할 수 있는
ActionController::Renderer
가 추가되었습니다. (Pull Request)ActionController::TestCase
및ActionDispatch::Integration
HTTP 요청 메서드에 키워드 인수 구문으로 마이그레이션했습니다. (Pull Request)http_cache_forever
가 Action Controller에 추가되어 만료되지 않는 응답을 캐시할 수 있습니다. (Pull Request)요청 변형에 대한 더 친숙한 액세스 기능이 추가되었습니다. (Pull Request)
해당 템플릿이 없는 작업의 경우 오류를 발생시키는 대신
head :no_content
를 렌더링합니다. (Pull Request)컨트롤러별 기본 폼 빌더를 재정의할 수 있는 기능이 추가되었습니다. (Pull Request)
API 전용 앱을 위한
ActionController::API
가 추가되었습니다. 이는ActionController::Base
의 대체제입니다. (Pull Request)ActionController::Parameters
가 더 이상HashWithIndifferentAccess
를 상속하지 않습니다. (Pull Request)config.force_ssl
및config.ssl_options
를 더 안전하게 사용하고 쉽게 비활성화할 수 있도록 변경되었습니다. (Pull Request)ActionDispatch::Static
에서 임의의 헤더를 반환할 수 있는 기능이 추가되었습니다. (Pull Request)protect_from_forgery
선행 기본값이false
로 변경되었습니다. (commit)ActionController::TestCase
는 Rails 5.1에서 별도의 gem으로 이동될 예정입니다. 대신ActionDispatch::IntegrationTest
를 사용하세요. (commit)Rails에서 기본적으로 약한 ETags를 생성합니다. (Pull Request)
명시적인
render
호출이 없고 해당 템플릿이 없는 컨트롤러 작업은 오류를 발생시키는 대신 암시적으로head :no_content
를 렌더링합니다. (Pull Request 1, 2)폼별 CSRF 토큰 옵션이 추가되었습니다. (Pull Request)
통합 테스트에 요청 인코딩 및 응답 구문 분석이 추가되었습니다. (Pull Request)
컨트롤러 수준에서 뷰 컨텍스트에 액세스할 수 있는
ActionController#helpers
가 추가되었습니다. (Pull Request)세션에 저장되기 전에 폐기된 플래시 메시지가 제거됩니다. (Pull Request)
fresh_when
및stale?
에 레코드 컬렉션을 전달할 수 있는 기능이 추가되었습니다. (Pull Request)ActionController::Live
가ActiveSupport::Concern
이 되었습니다. 이는 다른 모듈에 포함되려면ActiveSupport::Concern
또는ActionController::Live
로 확장되어야 함을 의미합니다. 일부 사람들은Warden
/Devise
인증 실패 처리 코드를 포함하는 다른 모듈을 사용하고 있었는데, 이는 스폰서된 스레드에서:warden
이 throw되는 경우 미들웨어가 잡을 수 없기 때문입니다. (자세한 내용은 이 이슈 참조)Response#strong_etag=
및#weak_etag=
와 이에 대응하는fresh_when
및stale?
옵션이 추가되었습니다. (Pull Request)
Action View
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
- `Abstract네, 번역을 계속하겠습니다.
Action View
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
AbstractController::Base::parent_prefixes
제거. (commit)ActionView::Helpers::RecordTagHelper
제거, 이 기능은 recordtaghelper gem으로 추출되었습니다. (Pull Request)translate
헬퍼의:rescue_format
옵션 제거, I18n에서 더 이상 지원되지 않습니다. (Pull Request)
주요 변경 사항
기본 템플릿 핸들러가
ERB
에서Raw
로 변경되었습니다. (commit)컬렉션 렌더링이 여러 부분 템플릿을 한 번에 캐시하고 가져올 수 있습니다. (Pull Request, commit)
명시적 종속성에 와일드카드 일치가 추가되었습니다. (Pull Request)
제출 태그의 기본 동작이
disable_with
로 변경되었습니다. 이를 통해 중복 제출을 방지할 수 있습니다. (Pull Request)부분 템플릿 이름이 더 이상 유효한 Ruby 식별자일 필요가 없습니다. (commit)
datetime_tag
헬퍼가 이제datetime-local
유형의 입력 태그를 생성합니다. (Pull Request)render partial:
헬퍼에 블록을 사용할 수 있습니다. (Pull Request)
Action Mailer
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
주요 변경 사항
템플릿 조회 시 기본 로케일 및 I18n 폴백을 고려합니다. (commit)
컨트롤러와 작업에 사용되는 명명 규칙과 일치하도록 생성기를 통해 만들어진 메일러에
_mailer
접미사가 추가되었습니다. (Pull Request)assert_enqueued_emails
및assert_no_enqueued_emails
가 추가되었습니다. (Pull Request)config.action_mailer.deliver_later_queue_name
구성을 추가하여 메일러 대기열 이름을 설정할 수 있습니다. (Pull Request)Action Mailer 뷰에서 조각 캐싱을 지원하도록 추가되었습니다.
config.action_mailer.perform_caching
구성 옵션을 추가하여 템플릿의 캐싱 여부를 결정할 수 있습니다. (Pull Request)
Active Record
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
중첩된 배열을 쿼리 값으로 전달하는 기능 제거. (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_class
및symbolized_sti_name
제거. (commit)ActiveRecord::Base.disable_implicit_join_references=
제거. (commit)문자열 액세서를 사용한 연결 사양 액세스 제거. (commit)
인스턴스 종속 연관 관계 사전 로드 지원 제거. (commit)
배타적 하한 경계가 있는 PostgreSQL 범위 지원 제거. (commit)
캐시된 Arel로 관계를 수정할 때의 deprecation이 제거되었습니다. 대신
ImmutableRelation
오류가 발생합니다. (commit)코어에서
ActiveRecord::Serialization::XmlSerializer
가 제거되었습니다. 이 기능은 activemodel-serializers-xml gem으로 추출되었습니다. (Pull Request)코어에서 레거시
mysql
데이터베이스 어댑터 지원이 제거되었습니다. 대부분의 사용자는mysql2
를 사용할 수 있습니다. 이는 유지 관리할 사람을 찾으면 별도의 gem으로 변환될 것입니다. (Pull Request 1, Pull Request 2)protected_attributes
gem 지원이 제거되었습니다. (commit)9.1 버전 미만의 PostgreSQL 지원이 제거되었습니다. (Pull Request)
activerecord-deprecated_finders
gem 지원이 제거되었습니다. (commit)ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
상수가 제거되었습니다. (commit)
사용 중단
쿼리에 클래스를 값으로 전달하는 것이 사용 중단되었습니다. 대신 문자열을 전달해야 합니다. (Pull Request)
Active Record 콜백 체인을 중단하기 위해
false
를 반환하는 것이 사용 중단되었습니다. 권장되는 방법은throw(:abort)
입니다. (Pull Request)ActiveRecord::Base.errors_in_transactional_callbacks=
사용 중단. (commit)Relation#uniq
대신Relation#distinct
사용. (commit)PostgreSQL
:point
유형이Point
객체를 반환하는 새로운 유형으로 대체되었습니다. (Pull Request)연관 관계 메서드에 truthy 인수를 전달하여 강제로 연관 관계 다시 로드하는 것이 사용 중단되었습니다. (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
에 인수를 전달하는 것이 사용 중단되었습니다.#tables
메서드는 일부 어댑터(mysql2, sqlite3)에서 테이블과 뷰를 모두 반환했지만, 다른 어댑터(postgresql)에서는 테이블만 반환했습니다. 이를 일관되게 하기 위해#tables
는 앞으로 테이블만 반환할 것입니다. (Pull Request)table_exists?
사용 중단 -#table_exists?
메서드는 테이블과 뷰를 모두 확인했습니다.#tables
와 일관되게 하기 위해#table_exists?
는 앞으로 테이블만 확인할 것입니다. (Pull Request)find_nth
에offset
인수를 전송하는 것이 사용 중단되었습니다. 대신 관계의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_batches
에end
옵션이 추가되어start
매개변수와 함께 배치 처리를 중지할 위치를 지정할 수 있습니다. (Pull Request)
주요 변경 사항
- 테이블 생성 시 `foreign네, 번역을 계속하겠습니다.
Active Record
자세한 변경 사항은 변경 로그를 참조하세요.
주요 변경 사항
테이블 생성 시
foreign_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
메서드가 추가되어 OR 연산자를 사용하여 WHERE 또는 HAVING 절을 결합할 수 있습니다. (commit)ActiveRecord::Base.suppress
가 추가되어 주어진 블록 동안 수신기가 저장되지 않도록 할 수 있습니다. (Pull Request)belongs_to
가 기본적으로 연관 관계가 없는 경우 유효성 검사 오류를 발생시킵니다. 이는 개별 연관 관계 기반으로optional: true
를 사용하여 끌 수 있습니다. 또한belongs_to
의required
옵션이optional
로 대체되었습니다. (Pull Request)db:structure:dump
동작을 구성하는config.active_record.dump_schemas
옵션이 추가되었습니다. (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_sources
및connection.data_source_exists?
가 추가되었습니다. 이 메서드는 Active Record 모델을 지원할 수 있는 관계(일반적으로 테이블과 뷰)를 결정합니다. (Pull Request)YAML 파일에서 모델 클래스를 설정할 수 있도록 fixtures 파일이 변경되었습니다. (Pull Request)
데이터베이스 마이그레이션 생성 시 기본 키로
uuid
를 사용할 수 있는 기능이 추가되었습니다. (Pull Request)ActiveRecord::Relation#left_joins
및ActiveRecord::Relation#left_outer_joins
가 추가되었습니다. (Pull Request)after_{create,update,delete}_commit
콜백이 추가되었습니다. (Pull Request)기존 마이그레이션을 중단하지 않고 매개변수 기본값을 변경할 수 있도록 마이그레이션 클래스에 제공되는 API 버전이 추가되었습니다. (Pull Request)
ApplicationRecord
가 추가되어 모든 앱 모델의 새로운 상위 클래스가 되었습니다. 이를 통해 앱 전체의 모델 동작을 구성할 수 있습니다. (Pull Request)ActiveRecord#second_to_last
및#third_to_last
메서드가 추가되었습니다. (Pull Request)PostgreSQL 및 MySQL에서 데이터베이스 객체(테이블, 열, 인덱스)에 주석을 추가할 수 있는 기능이 추가되었습니다. (Pull Request)
mysql2
어댑터에 준비된 문을 지원하도록 추가되었습니다. 이전에는 이 기능이 deprecated된mysql
레거시 어댑터에서만 지원되었습니다. 활성화하려면config/database.yml
에prepared_statements: true
를 설정하세요. (Pull Request)ActiveRecord::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)touch
메서드에time
옵션이 추가되어 현재 시간이 아닌 다른 시간으로 레코드를 터치할 수 있습니다. (Pull Request)트랜잭션 콜백에서 발생한 오류가 더 이상 무시되지 않고 버블링됩니다. 이전에는 (새로 deprecated된)
raise_in_transactional_callbacks = true
옵션을 사용하지 않는 한 이러한 오류가 로그에 기록되고 무시되었습니다. (commit)
Active Model
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
ActiveModel::Dirty#reset_#{attribute}
및ActiveModel::Dirty#reset_changes
제거. (Pull Request)XML 직렬화. 이 기능은 activemodel-serializers-xml gem으로 추출되었습니다. (Pull Request)
ActionController::ModelNaming
모듈 제거. (Pull Request)
사용 중단
Active Model 및
ActiveModel::Validations
콜백 체인을 중단하기 위해false
를 반환하는 것이 사용 중단되었습니다. 권장되는 방법은throw(:abort)
입니다. (Pull Request)ActiveModel::Errors#get
,ActiveModel::Errors#set
,ActiveModel::Errors#[]=
메서드의 일관성 없는 동작이 사용 중단되었습니다. (Pull Request)validates_length_of
의:tokenizer
옵션이 일반 Ruby로 대체되었습니다. (Pull Request)ActiveModel::Errors#add_on_empty
및ActiveModel::Errors#add_on_blank
가 대체 없이 사용 중단되었습니다. (Pull Request)
주요 변경 사항
ActiveModel::Errors#details
가 추가되어 어떤 유효성 검사기가 실패했는지 확인할 수 있습니다. (Pull Request)ActiveRecord::AttributeAssignment
가ActiveModel::AttributeAssignment
로 추출되어 포함 가능한 모듈로 사용할 수 있습니다. (Pull Request)ActiveModel::Dirty#[attr_name]_previously_changed?
및ActiveModel::Dirty#[attr_name]_previous_change
가 추가되어 모델이 저장된 후에도 기록된 변경 사항에 액세스할 수 있습니다. (Pull Request)valid?
및invalid?
에서 한 번에 여러 컨텍스트를 검증할 수 있습니다. (Pull Request)validates_acceptance_of
가1
외에도true
를 기본값으로 허용하도록 변경되었습니다. (Pull Request)
Active Job
자세한 변경 사항은 변경 로그를 참조하세요.
주요 변경 사항
ActiveJob::Base.deserialize
가 작업 클래스에 위임됩니다. 이를 통해 작업이 직렬화될 때 임의의 메타데이터를 첨부하고 수행될 때 다시 읽을 수 있습니다. (Pull Request)작업별로 큐 어댑터를 구성할 수 있는 기능이 추가되었습니다. (Pull Request)
생성된 작업이 기본적으로
app/jobs/application_job.rb
에서 상속됩니다. (Pull Request)DelayedJob
,Sidekiq
,qu
,que
,queue_classic
이ActiveJob::Base
에provider_job_id
로 작업 ID를 보고할 수 있습니다. ([Pull Request](https://github.com/rails/rails/pull/20네, 번역을 계속하겠습니다.
Active Job
자세한 변경 사항은 변경 로그를 참조하세요.
주요 변경 사항
DelayedJob
,Sidekiq
,qu
,que
,queue_classic
이ActiveJob::Base
에provider_job_id
로 작업 ID를 보고할 수 있습니다. (Pull Request, Pull Request, commit)concurrent-ruby
스레드 풀에 작업을 큐잉하는 간단한AsyncJob
프로세서와 관련AsyncAdapter
를 구현했습니다. (Pull Request)기본 어댑터를 인라인에서 비동기로 변경했습니다. 이는 테스트에서 동기적으로 발생하는 동작에 의존하지 않도록 하는 더 나은 기본값입니다. (commit)
Active Support
자세한 변경 사항은 변경 로그를 참조하세요.
제거된 기능
ActiveSupport::JSON::Encoding::CircularReferenceError
제거. (commit)ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
및ActiveSupport::JSON::Encoding.encode_big_decimal_as_string
제거. (commit)ActiveSupport::SafeBuffer#prepend
제거. (commit)Kernel
의silence_stderr
,silence_stream
,capture
,quietly
메서드 제거. (commit)active_support/core_ext/big_decimal/yaml_conversions
파일 제거. (commit)ActiveSupport::Cache::Store.instrument
및ActiveSupport::Cache::Store.instrument=
제거. (commit)Class#superclass_delegating_accessor
제거. 대신Class#class_attribute
를 사용하세요. (Pull Request)ThreadSafe::Cache
가 제거되었습니다. 대신Concurrent::Map
을 사용하세요. (Pull Request)Ruby 2.2에서 구현된
Object#itself
가 제거되었습니다. (Pull Request)
사용 중단
MissingSourceFile
이LoadError
로 대체되었습니다. (commit)Ruby 2.0에 도입된
Module#prepend
를 사용하도록alias_method_chain
이 사용 중단되었습니다. (Pull Request)ActiveSupport::Concurrency::Latch
가Concurrent::CountDownLatch
(concurrent-ruby)로 대체되었습니다. (Pull Request)number_to_human_size
의:prefix
옵션이 대체 없이 사용 중단되었습니다. (Pull Request)Module#qualified_const_
가 기본 제공Module#const_
메서드로 대체되었습니다. (Pull Request)콜백을 정의할 때 문자열을 전달하는 것이 사용 중단되었습니다. (Pull Request)
ActiveSupport::Cache::Store#namespaced_key
,ActiveSupport::Cache::MemCachedStore#escape_key
,ActiveSupport::Cache::FileStore#key_file_path
가 사용 중단되었습니다. 대신normalize_key
를 사용하세요. (Pull Request, commit)ActiveSupport::Cache::LocaleCache#set_cache_value
가write_cache_value
로 대체되었습니다. (Pull Request)assert_nothing_raised
에 인수를 전달하는 것이 사용 중단되었습니다. (Pull Request)Module.local_constants
가Module.constants(false)
로 대체되었습니다. (Pull Request)
주요 변경 사항
ActiveSupport::MessageVerifier
에#verified
및#valid_message?
메서드가 추가되었습니다. (Pull Request)콜백 체인을 중단하는 방법이 변경되었습니다. 이제 명시적으로
throw(:abort)
를 사용하는 것이 권장됩니다. (Pull Request)config.active_support.halt_callback_chains_on_return_false
구성 옵션이 추가되어 Active Record, Active Model, Active Model::Validations 콜백 체인이 ‘before’ 콜백에서false
를 반환하여 중단될 수 있는지 여부를 지정할 수 있습니다. (Pull Request)기본 테스트 순서가
:sorted
에서:random
으로 변경되었습니다. (commit)Date
,Time
,DateTime
에#on_weekend?
,#on_weekday?
,#next_weekday
,#prev_weekday
메서드가 추가되었습니다. (Pull Request, Pull Request)Date
,Time
,DateTime
의#next_week
및#prev_week
에same_time
옵션이 추가되었습니다. (Pull Request)Date
,Time
,DateTime
에#prev_day
및#next_day
가 추가되었습니다. (Pull Request)base58 문자열 생성을 위한
SecureRandom.base58
이 추가되었습니다. (commit)ActiveSupport::TestCase
에file_fixture
가 추가되었습니다. 이를 통해 테스트 케이스에서 샘플 파일에 쉽게 액세스할 수 있습니다. (Pull Request)Enumerable
과Array
에 지정된 요소를 제외한 사본을 반환하는#without
이 추가되었습니다. (Pull Request)ActiveSupport::ArrayInquirer
및Array#inquiry
가 추가되었습니다. (Pull Request)ActiveSupport::TimeZone#strptime
이 추가되어 주어진 타임존에서 시간을 구문 분석할 수 있습니다. (commit)Integer#positive?
및Integer#negative?
쿼리 메서드가 추가되었습니다. (commit)ActiveSupport::OrderedOptions
가져오기 메서드에 뱅 버전이 추가되어 값이.blank?
인 경우KeyError
를 발생시킵니다. (Pull Request)Time.days_in_year
가 추가되어 주어진 연도 또는 현재 연도의 일수를 반환합니다. (commit)애플리케이션 소스 코드, 라우트, 로케일 등의 변경 사항을 비동기적으로 감지하는 이벤트 기반 파일 감시기가 추가되었습니다. (Pull Request)
스레드별 클래스 및 모듈 변수를 선언하는
thread_m/cattr_accessor/reader/writer
메서드 모음이 추가되었습니다. (Pull Request)Array#second_to_last
및Array#third_to_last
메서드가 추가되었습니다. (Pull Request)구성 요소와 라이브러리가 애플리케이션 코드 실행 및 애플리케이션 재로드 프로세스를 관리하고 참여할 수 있도록
ActiveSupport::Executor
및ActiveSupport::Reloader
API가 공개되었습니다. (Pull Request)ActiveSupport::Duration
이 ISO8601 형식의 지원을 추가했습니다. (Pull Request)ActiveSupport::JSON.decode
가parse_json_times
가 활성화된 경우 ISO8601 로컬 시간 구문 분석을 지원합니다. (Pull Request)ActiveSupport::JSON.decode
가 날짜 문자열에 대해Date
객체를 반환합니다. (Pull Request)TaggedLogging
에 로거가 서로 태그를 공유하지 않도록 여러 번 인스턴스화될 수 있는 기능이 추가되었습니다. (Pull Request)
크레딧
Rails에 많은 시간을 보내 안정적이고 강력한 프레임워크로 만든 많은 기여자의 전체 목록을 참조하세요. 모든 분들께 박수를 보냅니다.