Ruby on Rails 7.1 릴리스 노트
Rails 7.1의 주요 기능:
Rails 7.1로 업그레이드하기
기존 애플리케이션을 업그레이드하는 경우, 업데이트를 시작하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 7.0으로 먼저 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 7.1로 업데이트를 시도해야 합니다. Rails 7.1로 업그레이드할 때 주의해야 할 사항은 Rails 업그레이드 가이드에서 확인할 수 있습니다.
주요 기능
새로운 Rails 애플리케이션에 Dockerfile 생성
새로운 Rails 애플리케이션 생성 시 기본 Docker 지원이 추가되었습니다. 새로운 애플리케이션을 생성하면 Docker 관련 파일이 애플리케이션에 포함됩니다.
이 파일들은 Docker를 사용하여 프로덕션 환경에 Rails 애플리케이션을 배포하기 위한 기본 설정을 제공합니다. 이 파일들은 개발 목적으로는 사용되지 않습니다.
다음은 이 Docker 파일을 사용하여 Rails 앱을 빌드하고 실행하는 방법의 예시입니다:
$ docker build -t app . $ docker volume create app-storage $ docker run --rm -it -v app-storage:/rails/storage -p 3000:3000 --env RAILS_MASTER_KEY=<your-config-master-key> app
이 Docker 이미지에서 콘솔이나 실행기를 시작할 수도 있습니다:
$ docker run --rm -it -v app-storage:/rails/storage --env RAILS_MASTER_KEY=<your-config-master-key> app console
Apple Silicon, AMD 또는 Intel 배포를 위한 다중 플랫폼 이미지를 만들어 Docker Hub에 푸시하려면 다음 단계를 따르세요:
$ docker login -u <your-user> $ docker buildx create --use $ docker buildx build --push --platform=linux/amd64,linux/arm64 -t <your-user/image-name> .
이 향상된 기능은 프로덕션 환경에서 Rails 애플리케이션을 실행하는 과정을 간소화하여, 애플리케이션을 빠르게 시작할 수 있는 편리한 시작점을 제공합니다.
ActiveRecord::Base.normalizes
추가
ActiveRecord::Base.normalizes
는 속성 정규화를 선언합니다. 정규화는 속성이 할당되거나 업데이트될 때 적용되며, 정규화된 값이 데이터베이스에 저장됩니다. 정규화는 쿼리 메서드의 해당 키워드 인수에도 적용되어, 정규화되지 않은 값을 사용하여 레코드를 쿼리할 수 있습니다.
예:
class User < ActiveRecord::Base normalizes :email, with: -> email { email.strip.downcase } normalizes :phone, with: -> phone { phone.delete("^0-9").delete_prefix("1") } end user = User.create(email: " CRUISE-CONTROL@EXAMPLE.COM\n") user.email # => "cruise-control@example.com" user = User.find_by(email: "\tCRUISE-CONTROL@EXAMPLE.COM ") user.email # => "cruise-control@example.com" user.email_before_type_cast # => "cruise-control@example.com" User.where(email: "\tCRUISE-CONTROL@EXAMPLE.COM ").count # => 1 User.where(["email = ?", "\tCRUISE-CONTROL@EXAMPLE.COM "]).count # => 0 User.exists?(email: "\tCRUISE-CONTROL@EXAMPLE.COM ") # => true User.exists?(["email = ?", "\tCRUISE-CONTROL@EXAMPLE.COM "]) # => false User.normalize_value_for(:phone, "+1 (555) 867-5309") # => "5558675309"
ActiveRecord::Base.generates_token_for
추가
ActiveRecord::Base.generates_token_for
는 특정 목적을 위한 토큰 생성을 정의합니다. 생성된 토큰은 만료될 수 있으며, 레코드 데이터를 포함할 수도 있습니다. 토큰을 사용하여 레코드를 가져올 때, 토큰의 데이터와 현재 레코드 데이터가 일치하지 않으면 토큰이 유효하지 않은 것으로 간주됩니다.
다음은 일회용 비밀번호 재설정 토큰을 구현하는 예시입니다:
class User < ActiveRecord::Base has_secure_password generates_token_for :password_reset, expires_in: 15.minutes do # `password_salt`(`has_secure_password`에 의해 정의됨)는 비밀번호의 솔트를 반환합니다. # 비밀번호가 변경되면 솔트도 변경되므로, 비밀번호가 변경되면 토큰도 만료됩니다. password_salt&.last(10) end end user = User.first token = user.generate_token_for(:password_reset) User.find_by_token_for(:password_reset, token) # => user user.update!(password: "new password") User.find_by_token_for(:password_reset, token) # => nil
여러 작업을 한 번에 enqueue하는 perform_all_later
추가
Active Job의 perform_all_later
메서드는 여러 작업을 동시에 enqueue하는 프로세스를 간소화합니다. 이 강력한 추가 기능을 통해 콜백을 트리거하지 않고도 작업을 enqueue할 수 있습니다. 이는 일괄적으로 작업을 enqueue해야 할 때 특히 유용하며, 큐 데이터 스토어에 대한 여러 번의 왕복을 줄일 수 있습니다.
perform_all_later
를 활용하는 방법은 다음과 같습니다:
# 개별 작업 enqueue ActiveJob.perform_all_later(MyJob.new("hello", 42), MyJob.new("world", 0)) # 작업 배열 enqueue user_jobs = User.pluck(:id).map { |id| UserJob.new(user_id: id) } ActiveJob.perform_all_later(user_jobs)
perform_all_later
를 사용하면 작업 enqueue 프로세스를 최적화하고 효율성을 높일 수 있습니다. 특히 많은 작업을 처리할 때 유용합니다. enqueue_all
메서드를 지원하는 큐 어댑터(예: Sidekiq 어댑터)의 경우 push_bulk
를 사용하여 enqueue 프로세스가 더욱 최적화됩니다.
새로운 메서드 perform_all_later
는 기존 enqueue.active_job
이벤트와는 별도의 enqueue_all.active_job
이벤트를 도입하여, 대량 enqueue 프로세스에 대한 정확한 추적과 보고가 가능합니다.
복합 기본 키 지원
복합 기본 키가 데이터베이스와 애플리케이션 수준 모두에서 지원됩니다. Rails는 스키마에서 이러한 키를 직접 도출할 수 있습니다. 이 기능은 다대다 관계 및 단일 열로는 레코드를 고유하게 식별할 수 없는 복잡한 데이터 모델에 특히 유용합니다.
Active Record의 쿼리 메서드(예: #reload
, #update
, #delete
)에서 생성되는 SQL에는 복합 기본 키의 모든 부분이 포함됩니다. #first
와 #last
와 같은 메서드는 전체 복합 기본 키를 ORDER BY
절에 사용합니다.
query_constraints
매크로를 사용하면 데이터베이스 스키마를 수정하지 않고도 “가상 기본 키"를 달성할 수 있습니다.
예:
class TravelRoute < ActiveRecord::Base query_constraints :origin, :destination end
마찬가지로, 연관관계에도 query_constraints:
옵션을 사용할 수 있습니다. 이 옵션은 복합 외래 키 역할을 하며, 연관 레코드에 액세스하는 데 사용되는 열 목록을 구성합니다.
예:
class TravelRouteReview < ActiveRecord::Base belongs_to :travel_route, query_constraints: [:travel_route_origin, :travel_route_destination] end
Trilogy
어댑터 도입
새로운 어댑터가 도입되어 Rails 애플리케이션에서 Trilogy
, MySQL 호환 데이터베이스 클라이언트를 원활하게 통합할 수 있습니다. 이제 Rails 애플리케이션은 config/database.yml
파일을 구성하여 Trilogy
기능을 통합할 수 있습니다. 예:
development: adapter: trilogy database: blog_development pool: 5
또는 DATABASE_URL
환경 변수를 사용하여 통합할 수 있습니다:
ENV['DATABASE_URL'] # => "trilogy://localhost/blog_development?pool=5"
ActiveSupport::MessagePack
추가
ActiveSupport::MessagePack
은 msgpack
gem과 통합되는 직렬화기입니다. ActiveSupport::MessagePack
은 msgpack
에서 지원하는 기본 Ruby 유형뿐만 아니라 Time
, ActiveSupport::TimeWithZone
, ActiveSupport::HashWithIndifferentAccess
등의 추가 유형도 직렬화할 수 있습니다. JSON
과 Marshal
에 비해 ActiveSupport::MessagePack
은 페이로드 크기를 줄이고 성능을 향상시킬 수 있습니다.
ActiveSupport::MessagePack
은 메시지 직렬화기로 사용할 수 있습니다:
config.active_support.message_serializer = :message_pack # 또는 개별적으로: ActiveSupport::MessageEncryptor.new(secret, serializer: :message_pack) ActiveSupport::MessageVerifier.new(secret, serializer: :message_pack)
쿠키 직렬화기로 사용할 수 있습니다:
config.action_dispatch.cookies_serializer = :message_pack
그리고 캐시 직렬화기로 사용할 수 있습니다:
config.cache_store = :file_store, "tmp/cache", { serializer: :message_pack } # 또는 개별적으로: ActiveSupport::Cache.lookup_store(:file_store, "tmp/cache", serializer: :message_pack)
config.autoload_lib
및 config.autoload_lib_once
도입으로 향상된 자동 로드
새로운 구성 메서드 config.autoload_lib(ignore:)
가 도입되었습니다. 이 메서드는 기본적으로 포함되지 않는 lib
디렉토리를 애플리케이션의 자동 로드 경로에 포함하는 데 사용됩니다. 또한 새로운 애플리케이션에는 config.autoload_lib(ignore: %w(assets tasks))
가 생성됩니다.
config/application.rb
또는 config/environments/*.rb
에서 호출될 때 이 메서드는 lib
디네, 번역을 계속하겠습니다.
config.autoload_lib
및 config.autoload_lib_once
도입으로 향상된 자동 로드 (계속)
렉토리를 config.autoload_paths
와 config.eager_load_paths
에 모두 추가합니다. 이 기능은 엔진에서는 사용할 수 없습니다.
유연성을 보장하기 위해 ignore
키워드 인수를 사용하여 lib
디렉토리 내의 하위 디렉토리를 자동 로더에서 제외할 수 있습니다. 예를 들어 assets
, tasks
, generators
디렉토리를 제외할 수 있습니다:
config.autoload_lib(ignore: %w(assets tasks generators))
config.autoload_lib_once
메서드는 config.autoload_lib
와 유사하지만, lib
를 config.autoload_once_paths
에 추가합니다.
자세한 내용은 자동 로드 가이드를 참고하세요.
일반 비동기 쿼리를 위한 Active Record API
Active Record API에 중요한 향상이 도입되어 비동기 쿼리 지원이 확장되었습니다. 이 향상은 집계(예: count
, sum
등) 및 단일 레코드를 반환하거나 Relation
이 아닌 모든 메서드에 대해 느린 쿼리를 더 효율적으로 처리할 수 있도록 합니다.
새로운 API에는 다음과 같은 비동기 메서드가 포함됩니다:
async_count
async_sum
async_minimum
async_maximum
async_average
async_pluck
async_pick
async_ids
async_find_by_sql
async_count_by_sql
다음은 그 중 하나인 async_count
를 사용하여 비동기적으로 게시된 게시물 수를 카운트하는 간단한 예입니다:
# 동기 카운트 published_count = Post.where(published: true).count # => 10 # 비동기 카운트 promise = Post.where(published: true).async_count # => #<ActiveRecord::Promise status=pending> promise.value # => 10
이러한 메서드를 사용하면 특정 유형의 데이터베이스 쿼리를 비동기적으로 실행할 수 있어 성능이 향상됩니다.
템플릿에서 엄격한 locals
설정 허용
템플릿에서 명시적인 locals
를 설정할 수 있는 새로운 기능을 도입했습니다. 이 향상된 기능을 통해 템플릿에 변수를 전달할 때 더 많은 제어와 명확성을 제공합니다.
기본적으로 템플릿은 키워드 인수로 모든 locals
를 허용합니다. 그러나 이제 템플릿 파일 시작 부분에 locals:
매직 주석을 추가하여 템플릿이 허용해야 하는 locals
를 정의할 수 있습니다.
작동 방식은 다음과 같습니다:
<%#locals: (message:) -%> <%= message %>
이러한 로컬에 대한 기본값을 설정할 수도 있습니다:
<% -%> <%= message %>
선택적 키워드 인수를 펼칠 수도 있습니다:
<%# locals: (message: "Hello, world!", **attributes) -%> <%= tag.p(message, **attributes) %>
로컬 사용을 완전히 비활성화하려면 다음과 같이 할 수 있습니다:
<%# locals: () %>
Action View는 #
로 시작하는 주석을 지원하는 모든 템플릿 엔진에서 locals:
매직 주석을 처리하며, 부분 템플릿의 어느 행에서든 매직 주석을 읽습니다.
주의: 키워드 인수만 지원됩니다. 위치 인수 또는 블록 인수를 정의하면 렌더링 시 Action View 오류가 발생합니다.
Rails.application.deprecators
추가
새로운 Rails.application.deprecators
메서드는 애플리케이션 내의 관리되는 deprecator 컬렉션을 반환하며, 개별 deprecator를 추가하고 검색할 수 있습니다:
Rails.application.deprecators[:my_gem] = ActiveSupport::Deprecation.new("2.0", "MyGem") Rails.application.deprecators[:other_gem] = ActiveSupport::Deprecation.new("3.0", "OtherGem")
컬렉션의 구성 설정은 컬렉션의 모든 deprecator에 영향을 미칩니다.
Rails.application.deprecators.debug = true Rails.application.deprecators[:my_gem].debug # => true Rails.application.deprecators[:other_gem].debug # => true
특정 코드 블록에서 모든 deprecator 경고를 음소거해야 하는 시나리오가 있을 수 있습니다. deprecator 컬렉션을 사용하면 블록 내에서 모든 deprecator 경고를 쉽게 음소거할 수 있습니다:
Rails.application.deprecators.silence do Rails.application.deprecators[:my_gem].warn # 경고 없음 (음소거됨) Rails.application.deprecators[:other_gem].warn # 경고 없음 (음소거됨) end
JSON response.parsed_body
에 패턴 매칭 지원
ActionDispatch::IntegrationTest
테스트 블록에서 JSON 응답의 response.parsed_body
를 호출하면 페이로드가 indifferent access로 사용할 수 있게 됩니다. 이를 통해 Ruby의 패턴 매칭과 Minitest의 패턴 매칭 지원을 활용할 수 있습니다:
get "/posts.json" response.content_type # => "application/json; charset=utf-8" response.parsed_body.class # => Array response.parsed_body # => [{"id"=>42, "title"=>"Title"},... assert_pattern { response.parsed_body => [{ id: 42 }] } get "/posts/42.json" response.content_type # => "application/json; charset=utf-8" response.parsed_body.class # => ActiveSupport::HashWithIndifferentAccess response.parsed_body # => {"id"=>42, "title"=>"Title"} assert_pattern { response.parsed_body => [{ title: /title/i }] }
response.parsed_body
에 Nokogiri를 사용하여 HTML 파싱 기능 추가
ActionDispatch::Testing
모듈에 response.body
의 HTML 값을 Nokogiri::HTML5::Document
인스턴스로 구문 분석하는 기능이 추가되었습니다:
get "/posts" response.content_type # => "text/html; charset=utf-8" response.parsed_body.class # => Nokogiri::HTML5::Document response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
새로 추가된 Nokogiri의 패턴 매칭 지원과 Minitest의 패턴 매칭 지원을 활용하면 HTML 응답의 구조와 내용에 대한 테스트 어설션을 작성할 수 있습니다:
get "/posts" html = response.parsed_body # => <html> # <head></head> # <body> # <main><h1>Some main content</h1></main> # </body> # </html> assert_pattern { html.at("main") => { content: "Some main content" } } assert_pattern { html.at("main") => { content: /content/ } } assert_pattern { html.at("main") => { children: [{ name: "h1", content: /content/ }] } }
ActionView::TestCase.register_parser
도입
ActionView::TestCase
를 확장하여 뷰 부분에서 렌더링된 콘텐츠를 알려진 구조로 구문 분석할 수 있도록 지원합니다. 기본적으로 rendered_html
은 HTML을 Nokogiri::XML::Node
로, rendered_json
은 JSON을 ActiveSupport::HashWithIndifferentAccess
로 구문 분석합니다:
test "renders HTML" do article = Article.create!(title: "Hello, world") render partial: "articles/article", locals: { article: article } assert_pattern { rendered_html.at("main h1") => { content: "Hello, world" } } end test "renders JSON" do article = Article.create!(title: "Hello, world") render formats: :json, partial: "articles/article", locals: { article: article } assert_pattern { rendered_json => { title: "Hello, world" } } end
렌더링된 콘텐츠를 RSS로 구문 분석하려면 RSS::Parser.parse
를 등록하세요:
register_parser :rss, -> rendered { RSS::Parser.parse(rendered) } test "renders RSS" do article = Article.create!(title: "Hello, world") render formats: :rss, partial: article, locals: { article: article } assert_equal "Hello, world", rendered_rss.items.last.title end
렌더링된 콘텐츠를 Capybara::Simple::Node로 구문 분석하려면 :html
파서를 Capybara.string
으로 다시 등록하세요:
register_parser :html, -> rendered { Capybara.string(rendered) } test "renders HTML" do article = Article.create!(title: "Hello, world") render partial: article rendered_html.assert_css "main h1", text: "Hello, world" end
Railties
자세한 변경 사항은 변경 로그를 참조하세요.
제거
bin/rails secrets:setup
명령어 제거.기본
X-Download-Options
헤더 제거(Internet Explorer에서만 사용됨).
사용 중단
Rails.application.secrets
사용 중단.secrets:show
및secrets:edit
명령어를credentials
로 대체.Rails::Generators::Testing::Behaviour
를Rails::Generators::Testing::Behavior
로 대체.
주요 변경 사항
sandbox_by_default
옵션을 추가하여 기본적으로 Rails 콘솔을 sandbox 모드로 시작할 수 있습니다.테스트 라인 범위로 필터링하는 새로운 구문을 추가했습니다.
rails railties:install:migrations
명령어를 실행할 때 대상 데이터베이스를 지정할 수 있는DATABASE
옵션을 추가했습니다.rails new --javascript
생성기에 Bun 지원을 추가했습니다.$ rails new my_new_app --javascript=bun
테스트 러너에 느린 테스트 표시 기능을 추가했습니다.
Action Cable
자세한 변경 사항은 변경 로그를 참조하세요.
제거
사용 중단
주요 변경 사항
capture_broadcasts
테스트 헬퍼를 추가하여 블록 내에서 전송된 모든 메시지를 캡처할 수 있습니다.Redis pub/sub 어댑터에 Redis 연결이 손실될 때 자동으로 다시 연결되는 기능을 추가했습니다.
ActionCable::Connection::Base
에before_command
,after_command
,around_command
명령 콜백을 추가했습니다.
Action Pack
자세한 변경 사항은 변경 로그를 참조하세요.
제거
-
Request#content_type
의 사용 중단 동작 제거
*네, 번역을 계속하겠습니다.
Action Pack
자세한 변경 사항은 변경 로그를 참조하세요.
제거 (계속)
config.action_dispatch.trusted_proxies
에 단일 값을 할당하는 기능 제거.시스템 테스트에 대한
poltergeist
및webkit
(capybara-webkit) 드라이버 등록 제거.
사용 중단
config.action_dispatch.return_only_request_media_type_on_content_type
사용 중단.AbstractController::Helpers::MissingHelperError
사용 중단.ActionDispatch::IllegalStateError
사용 중단.speaker
,vibrate
,vr
권한 정책 지시어 사용 중단.config.action_dispatch.show_exceptions
에 대한true
및false
값 사용 중단,:all
,:rescuable
,:none
으로 대체.
주요 변경 사항
ActionController::Parameters
에exclude?
메서드를 추가했습니다.include?
메서드의 반대입니다.ActionController::Parameters#extract_value
메서드를 추가하여 params에서 직렬화된 값을 추출할 수 있습니다.CSRF 토큰을 저장하고 검색하는 데 사용자 정의 로직을 사용할 수 있는 기능을 추가했습니다.
시스템 테스트 스크린샷 헬퍼에
html
및screenshot
키워드 인수를 추가했습니다.
Action View
자세한 변경 사항은 변경 로그를 참조하세요.
제거
ActionView::Path
상수 제거.부분 템플릿에 인스턴스 변수를 로컬로 전달하는 기능 제거.
사용 중단
주요 변경 사항
check_box_tag
및radio_button_tag
가 이제checked
키워드 인수를 허용합니다.picture_tag
헬퍼를 추가하여 HTML<picture>
태그를 생성할 수 있습니다.simple_format
헬퍼가:sanitize_options
기능을 처리하여 sanitize 프로세스에 추가 옵션을 추가할 수 있습니다.simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>", {}, { sanitize_options: { attributes: %w[target href] } }) # => "<p><a target=\"_blank\" href=\"http://example.com\">Continue</a></p>"
Action Mailer
자세한 변경 사항은 변경 로그를 참조하세요.
제거
사용 중단
config.action_mailer.preview_path
사용 중단.assert_enqueued_email_with
에:args
키워드 인수를 통해 params를 전달하는 기능 사용 중단. 대신:params
키워드 인수를 사용하세요.
주요 변경 사항
config.action_mailer.preview_paths
를 추가하여 여러 미리보기 경로를 지원합니다.capture_emails
테스트 헬퍼를 추가하여 블록 내에서 전송된 모든 이메일을 캡처할 수 있습니다.ActionMailer::TestHelper
에deliver_enqueued_emails
를 추가하여 대기 중인 모든 이메일 작업을 전송할 수 있습니다.
Active Record
자세한 변경 사항은 변경 로그를 참조하세요.
제거
ActiveRecord.legacy_connection_handling
지원 제거.ActiveRecord::Base
구성 접근자 제거:include_replicas
에 대한configs_for
지원 제거. 대신:include_hidden
을 사용하세요.config.active_record.partial_writes
사용 중단.Tasks::DatabaseTasks.schema_file_type
사용 중단.PostgreSQL에 대한
--no-comments
플래그 제거.
사용 중단
#remove_connection
에name
인수 사용 중단.check_pending!
을check_all_pending!
로 대체.add_foreign_key
의deferrable: true
옵션을deferrable: :immediate
로 대체.TestFixtures#fixture_path
를TestFixtures#fixture_paths
로 대체.Base
에서connection_handler
로의 위임 사용 중단.config.active_record.suppress_multiple_database_warning
사용 중단.SQL 문자열 템플릿에서
ActiveSupport::Duration
을 보간된 바인드 매개변수로 사용하는 것 사용 중단.all_connection_pools
를 사용 중단하고connection_pool_list
를 더 명시적으로 만듭니다.read_attribute(:id)
가 기본 키가:id
가 아닌 경우 기본 키를 반환하는 것 사용 중단.#merge
의rewhere
인수 사용 중단.alias_attribute
를 통한 비속성 별칭 사용 중단.
주요 변경 사항
TestFixtures#fixture_paths
를 추가하여 여러 fixture 경로를 지원합니다.has_secure_password
를 사용할 때authenticate_by
를 추가했습니다.update_attribute!
를ActiveRecord::Persistence
에 추가했습니다.update_attribute
와 유사하지만before_*
콜백이:abort
를 throw하면ActiveRecord::RecordNotSaved
를 발생시킵니다.별칭된 속성을
insert_all
/upsert_all
에서 사용할 수 있습니다.add_index
에:include
옵션을 추가했습니다.#regroup
쿼리 메서드를 추가하여.unscope(:group).group(fields)
의 단축 형태를 제공합니다.SQLite3
어댑터에 자동 채워진 열과 사용자 정의 기본 키 지원을 추가했습니다.SQLite3
데이터베이스 연결에 대한 현대적이고 성능이 좋은 기본값을 추가했습니다.열 튜플 구문을 사용하여 WHERE 절을 지정할 수 있습니다.
Topic.where([:title, :author_name] => [["The Alchemist", "Paulo Coelho"], ["Harry Potter", "J.K Rowling"]])
자동 생성된 인덱스 이름이 이제 62바이트로 제한되어 MySQL, PostgreSQL, SQLite의 기본 인덱스 이름 길이 제한 내에 포함됩니다.
Trilogy 데이터베이스 클라이언트에 대한 어댑터를 도입했습니다.
ActiveRecord.disconnect_all!
메서드를 추가하여 모든 풀의 모든 연결을 즉시 닫을 수 있습니다.PostgreSQL 마이그레이션 명령어에 enum 이름 변경, 값 추가, 값 이름 변경 기능을 추가했습니다.
ActiveRecord::Base#id_value
별칭을 추가하여 레코드의 ID 열 원시 값에 액세스할 수 있습니다.enum
에 대한 유효성 검사 옵션을 추가했습니다.
Active Storage
자세한 변경 사항은 변경 로그를 참조하세요.
제거
Active Storage 구성에서 잘못된 기본 콘텐츠 유형 제거.
ActiveStorage::Current#host
및ActiveStorage::Current#host=
메서드 제거.첨부 파일 컬렉션에 값을 할당할 때의 사용 중단 동작. 컬렉션에 추가하는 대신 컬렉션이 대체됩니다.
첨부 파일 연결에서
purge
및purge_later
메서드 제거.
사용 중단
주요 변경 사항
ActiveStorage::Analyzer::AudioAnalyzer
가 이제metadata
해시에sample_rate
및tags
를 출력합니다.첨부 파일에서
preview
또는representation
메서드를 호출할 때 미리 정의된 변형을 활용할 수 있는 옵션을 추가했습니다.변형을 선언할 때
preprocessed
옵션이 추가되었습니다.Active Storage 변형을 삭제할 수 있는 기능을 추가했습니다.
User.first.avatar.variant(resize_to_limit: [100, 100]).destroy
Active Model
자세한 변경 사항은 변경 로그를 참조하세요.
제거
사용 중단
주요 변경 사항
LengthValidator
의:in
/:within
옵션에 무한 범위 지원을 추가했습니다.validates_length_of :first_name, in: ..30
시작점이 없는 범위에 대한
inclusivity/exclusivity
유효성 검사기 지원을 추가했습니다.validates_inclusion_of :birth_date, in: -> { (..Date.today) }
validates_exclusion_of :birth_date, in: -> { (..Date.today) }
has_secure_password
에 비밀번호 챌린지 지원을 추가했습니다. 설정된 경우 저장된password_digest
와 비밀번호 챌린지가 일치하는지 확인합니다.유효성 검사기가 레코드 인수 없이 람다를 허용하도록 변경했습니다.
# 이전 validates_comparison_of :birth_date, less_than_or_equal_to: ->(_record) { Date.today } # 이후 validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today }
Active Support
자세한 변경 사항은 변경 로그를 참조하세요.
제거
Enumerable#sum
의 사용 중단 재정의 제거.ActiveSupport::PerThreadRegistry
제거.Array
,Range
,Date
,DateTime
,Time
,BigDecimal
,Float
,Integer
에 대한 형식 지정 옵션 전달 기능 제거.ActiveSupport::TimeWithZone.name
의 사용 중단 재정의 제거.active_support/core_ext/uri
파일 제거.active_support/core_ext/range/include_time_with_zone
파일 제거.ActiveSupport::SafeBuffer
의 암시적 문자열 변환 제거.Digest::UUID
에 정의된 상수가 아닌 네임스페이스 ID를 제공할 때 잘못된 RFC 4122 UUID를 생성하는 기능 제거.
사용 중단
config.active_support.disable_to_s_conversion
사용 중단.config.active_support.remove_deprecated_time_with_zone_name
사용 중단.config.active_support.use_rfc4122_namespaced_uuids
사용 중단.SafeBuffer#clone_empty
사용 중단.ActiveSupport::Deprecation
싱글톤 사용 중단.ActiveSupport::Cache::MemCacheStore
를Dalli::Client
인스턴스로 초기화하는 기능 사용 중단.Notification::Event
의#children
및#parent_of?
메서드 사용 중단.
주요 변경 사항
Active Job
자세한 변경 사항은 변경 로그를 참조하세요.
제거
-
QueAdapter
제거.
사용 중단
주요 변경 사항
여러 작업을 한 번에 enqueue하는
perform_all_later
추가.작업 생성기에
--parent
옵션을 추가하여 작업의 부모 클래스를 지정할 수 있습니다.ActiveJob::Base
에 작업이 폐기되기 직전에 실행되는after_discard
메서드를 추가했습니다.백그라운드 작업 enqueue 호출자 네, 번역을 계속하겠습니다.
Active Job
자세한 변경 사항은 변경 로그를 참조하세요.
제거
-
QueAdapter
제거.
사용 중단
주요 변경 사항
여러 작업을 한 번에 enqueue하는
perform_all_later
추가.작업 생성기에
--parent
옵션을 추가하여 작업의 부모 클래스를 지정할 수 있습니다.ActiveJob::Base
에 작업이 폐기되기 직전에 실행되는after_discard
메서드를 추가했습니다.백그라운드 작업 enqueue 호출자 로깅을 지원합니다.
Action Text
자세한 변경 사항은 변경 로그를 참조하세요.
제거
사용 중단
주요 변경 사항
Action Mailbox
자세한 변경 사항은 변경 로그를 참조하세요.
제거
사용 중단
주요 변경 사항
수신자에
X-Forwarded-To
주소를 추가했습니다.ActionMailbox::Base
에bounce_now_with
메서드를 추가하여 메일러 대기열을 거치지 않고 즉시 반송 이메일을 보낼 수 있습니다.
Ruby on Rails 가이드
자세한 변경 사항은 변경 로그를 참조하세요.
주요 변경 사항
크레딧
Rails에 많은 시간을 투자하여 안정적이고 강력한 프레임워크로 만든 Rails 기여자 전체 목록을 참조하세요. 모든 분들께 박수를 보냅니다.