This repository has been archived by the owner on Aug 26, 2021. It is now read-only.
Update dependency @rails/activestorage to v6.1.3 #85
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
6.0.3
->6.1.3
Release Notes
rails/rails
v6.1.3
Compare Source
Active Support
Active Model
Active Record
Fix the MySQL adapter to always set the right collation and charset
to the connection session.
Rafael Mendonça França
Fix MySQL adapter handling of time objects when prepared statements
are enabled.
Rafael Mendonça França
Fix scoping in enum fields using conditions that would generate
an
IN
clause.Ryuta Kamizono
Skip optimised #exist? query when #include? is called on a relation
with a having clause
Relations that have aliased select values AND a having clause that
references an aliased select value would generate an error when
#include? was called, due to an optimisation that would generate
call #exists? on the relation instead, which effectively alters
the select values of the query (and thus removes the aliased select
values), but leaves the having clause intact. Because the having
clause is then referencing an aliased column that is no longer
present in the simplified query, an ActiveRecord::InvalidStatement
error was raised.
An sample query affected by this problem:
This change adds an addition check to the condition that skips the
simplified #exists? query, which simply checks for the presence of
a having clause.
Fixes #41417
Michael Smart
Increment postgres prepared statement counter before making a prepared statement, so if the statement is aborted
without Rails knowledge (e.g., if app gets kill -9d during long-running query or due to Rack::Timeout), app won't end
up in perpetual crash state for being inconsistent with Postgres.
wbharding, Martin Tepper
Action View
Action Pack
Re-define routes when not set correctly via inheritance.
John Hawthorn
Active Job
Action Mailer
Action Cable
Active Storage
Action Mailbox
Action Text
Railties
v6.1.2
Compare Source
Active Support
ActiveSupport::Cache::MemCacheStore
now accepts an explicitnil
for itsaddresses
argument.is now equivalent to
and is also equivalent to
which is the fallback behavior of Dalli
Active Model
Active Record
Fix timestamp type for sqlite3.
Eileen M. Uchitelle
Make destroy async transactional.
An active record rollback could occur while enqueuing a job. In this
case the job would enqueue even though the database deletion
rolledback putting things in a funky state.
Now the jobs are only enqueued until after the db transaction has been committed.
Cory Gwin
Fix malformed packet error in MySQL statement for connection configuration.
robinroestenburg
Connection specification now passes the "url" key as a configuration for the
adapter if the "url" protocol is "jdbc", "http", or "https". Previously only
urls with the "jdbc" prefix were passed to the Active Record Adapter, others
are assumed to be adapter specification urls.
Fixes #41137.
Jonathan Bracy
Fix granular connection swapping when there are multiple abstract classes.
Eileen M. Uchitelle
Fix
find_by
with custom primary key for belongs_to association.Ryuta Kamizono
Add support for
rails console --sandbox
for multiple database applications.alpaca-tc
Fix
where
on polymorphic association with empty array.Ryuta Kamizono
Fix preventing writes for
ApplicationRecord
.Eileen M. Uchitelle
Action View
Action Pack
Fix error in
ActionController::LogSubscriber
that would happen when throwing inside a controller action.Janko Marohnić
Fix
fixture_file_upload
deprecation whenfile_fixture_path
is a relative path.Eugene Kenny
Active Job
Action Mailer
Action Cable
Active Storage
Action Mailbox
Action Text
Railties
v6.1.1
Compare Source
Active Support
Change
IPAddr#to_json
to match the behavior of the json gem returning the string representationinstead of the instance variables of the object.
Before:
=> "{"addr":2130706433,"family":2,"mask_addr":4294967295}"
=> ""127.0.0.1""
Active Model
Active Record
Fix fixtures loading when strict loading is enabled for the association.
Alex Ghiculescu
Fix
where
with custom primary key for belongs_to association.Ryuta Kamizono
Fix
where
with aliased associations.Ryuta Kamizono
Fix
composed_of
with symbol mapping.Ryuta Kamizono
Don't skip money's type cast for pluck and calculations.
Ryuta Kamizono
Fix
where
on polymorphic association with non Active Record object.Ryuta Kamizono
Make sure
db:prepare
works even the schema file doesn't exist.Rafael Mendonça França
Fix complicated
has_many :through
with nested where condition.Ryuta Kamizono
Handle STI models for
has_many dependent: :destroy_async
.Muhammad Usman
Restore possibility of passing
false
to :polymorphic option ofbelongs_to
.Previously, passing
false
would trigger the option validation logicto throw an error saying :polymorphic would not be a valid option.
glaszig
Allow adding nonnamed expression indexes to be revertible.
Fixes #40732.
Previously, the following code would raise an error, when executed while rolling back,
and the index name should be specified explicitly. Now, the index name is inferred
automatically.
fatkodima
Action View
Fix lazy translation in partial with block.
Marek Kasztelnik
Avoid extra
SELECT COUNT
queries when rendering Active Record collections.aar0nr
Link preloading keep integrity hashes in the header.
Étienne Barrié
Add
config.action_view.preload_links_header
to allow disabling ofthe
Link
header being added by default when usingstylesheet_link_tag
and
javascript_include_tag
.Andrew White
The
translate
helper now resolvesdefault
values when anil
key isspecified, instead of always returning
nil
.Jonathan Hefner
Action Pack
Fix nil translation key lookup in controllers/
Jan Klimo
Quietly handle unknown HTTP methods in Action Dispatch SSL middleware.
Alex Robbin
Change the request method to a
GET
when passing failed requests down toconfig.exceptions_app
.Alex Robbin
Active Job
Make
retry_job
return the job that was created.Rafael Mendonça França
Include
ActiveSupport::Testing::Assertions
inActiveJob::TestHelpers
.Mikkel Malmberg
Action Mailer
Sets default mailer queue to
"default"
in the mail assertions.Paul Keen
Action Cable
Active Storage
Fix S3 multipart uploads when threshold is larger than file.
Matt Muller
Action Mailbox
Action Text
Railties
Allow spaces in path to Yarn binstub and only run on precompile if needed.
Markus Doits
Populate ARGV for app template.
Fixes #40945.
Jonathan Hefner
v6.1.0
Compare Source
Active Support
Ensure
MemoryStore
disables compression by default. Reverts behavior ofMemoryStore
to its prior rails5.1
behavior.Max Gurewitz
Calling
iso8601
on negative durations retains the negative sign on individualdigits instead of prepending it.
This change is required so we can interoperate with PostgreSQL, which prefers
negative signs for each component.
Compatibility with other iso8601 parsers which support leading negatives as well
as negatives per component is still retained.
Before:
=> "-P1Y1D"
=> "P-1Y-1D"
Remove deprecated
ActiveSupport::Notifications::Instrumenter#end=
.Rafael Mendonça França
Deprecate
ActiveSupport::Multibyte::Unicode.default_normalization_form
.Rafael Mendonça França
Remove deprecated
ActiveSupport::Multibyte::Unicode.pack_graphemes
,ActiveSupport::Multibyte::Unicode.unpack_graphemes
,ActiveSupport::Multibyte::Unicode.normalize
,ActiveSupport::Multibyte::Unicode.downcase
,ActiveSupport::Multibyte::Unicode.upcase
andActiveSupport::Multibyte::Unicode.swapcase
.Rafael Mendonça França
Remove deprecated
ActiveSupport::Multibyte::Chars#consumes?
andActiveSupport::Multibyte::Chars#normalize
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/range/include_range
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/hash/transform_values
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/hash/compact
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/array/prepend_and_append
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/numeric/inquiry
.Rafael Mendonça França
Remove deprecated file
active_support/core_ext/module/reachable
.Rafael Mendonça França
Remove deprecated
Module#parent_name
,Module#parent
andModule#parents
.Rafael Mendonça França
Remove deprecated
ActiveSupport::LoggerThreadSafeLevel#after_initialize
.Rafael Mendonça França
Remove deprecated
LoggerSilence
constant.Rafael Mendonça França
Remove deprecated fallback to
I18n.default_local
whenconfig.i18n.fallbacks
is empty.Rafael Mendonça França
Remove entries from local cache on
RedisCacheStore#delete_matched
Fixes #38627
ojab
Speed up
ActiveSupport::SecurityUtils.fixed_length_secure_compare
by usingOpenSSL.fixed_length_secure_compare
, if available.Nate Matykiewicz
ActiveSupport::Cache::MemCacheStore
now checksENV["MEMCACHE_SERVERS"]
before falling back to"localhost:11211"
if configured without any addresses.is now equivalent to
instead of
ActiveSupport::Subscriber#attach_to
now accepts aninherit_all:
argument. When set to true,it allows a subscriber to receive events for methods defined in the subscriber's ancestor class(es).
We detach ActionControllerSubscriber from the :action_controller namespace so that our CustomActionControllerSubscriber
can provide its own instrumentation for certain events in the namespace
=> CustomActionControllerSubscriber will process events for "start_processing.action_controller" notifications
using its own #start_processing implementation, while retaining ActionControllerSubscriber's instrumentation
for "redirect_to.action_controller" notifications
Allow the digest class used to generate non-sensitive digests to be configured with
config.active_support.hash_digest_class
.config.active_support.use_sha1_digests
is deprecated in favour ofconfig.active_support.hash_digest_class = ::Digest::SHA1
.Dirkjan Bussink
Fix bug to make memcached write_entry expire correctly with unless_exist
Jye Lee
Add
ActiveSupport::Duration
conversion methodsin_seconds
,in_minutes
,in_hours
,in_days
,in_weeks
,in_months
, andin_years
return the respective duration covered.Jason York
Fixed issue in
ActiveSupport::Cache::RedisCacheStore
not passing optionsto
read_multi
causingfetch_multi
to not work properlyRajesh Sharma
Fixed issue in
ActiveSupport::Cache::MemCacheStore
which caused duplicate compression,and caused the provided
compression_threshold
to not be respected.Max Gurewitz
Prevent
RedisCacheStore
andMemCacheStore
from performing compressionwhen reading entries written with
raw: true
.Max Gurewitz
URI.parser
is deprecated and will be removed in Rails 6.2. UseURI::DEFAULT_PARSER
instead.Jean Boussier
require_dependency
has been documented to be obsolete in:zeitwerk
mode. The method is not deprecated as such (yet), but applications are
encouraged to not use it.
In
:zeitwerk
mode, semantics match Ruby's and you do not need to bedefensive with load order. Just refer to classes and modules normally. If
the constant name is dynamic, camelize if needed, and constantize.
Xavier Noria
Add 3rd person aliases of
Symbol#start_with?
andSymbol#end_with?
.Ryuta Kamizono
Add override of unary plus for
ActiveSupport::Duration
.+ 1.second
is now identical to+1.second
to prevent errorswhere a seemingly innocent change of formatting leads to a change in the code behavior.
Before:
=> ActiveSupport::Duration
=> Integer
=> ActiveSupport::Duration
=> ActiveSupport::Duration
Add subsec to
ActiveSupport::TimeWithZone#inspect
.Before:
=> "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
=> "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
=> "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
=> "Thu, 22 Jun 2017 02:39:00.000000000 UTC +00:00"
=> "Thu, 22 Jun 2017 02:39:00.123456780 UTC +00:00"
=> "Thu, 22 Jun 2017 02:39:00.333333333 UTC +00:00"
Calling
ActiveSupport::TaggedLogging#tagged
without a block now returns a tagged logger.Eugene Kenny
Align
Range#cover?
extension behavior with Ruby behavior for backwards ranges.(1..10).cover?(5..3)
now returnsfalse
, as it does in plain Ruby.Also update
#include?
and#===
behavior to match.Michael Groeneman
Update to TZInfo v2.0.0.
This changes the output of
ActiveSupport::TimeZone.utc_to_local
, butcan be controlled with the
ActiveSupport.utc_to_local_returns_utc_offset_times
config.New Rails 6.1 apps have it enabled by default, existing apps can upgrade
via the config in config/initializers/new_framework_defaults_6_1.rb
See the
utc_to_local_returns_utc_offset_times
documentation for details.Phil Ross, Jared Beck
Add Date and Time
#yesterday?
and#tomorrow?
alongside#today?
.Aliased to
#prev_day?
and#next_day?
to match the existing#prev/next_day
methods.Jatin Dhankhar
Add
Enumerable#pick
to complementActiveRecord::Relation#pick
.Eugene Kenny
[Breaking change]
ActiveSupport::Callbacks#halted_callback_hook
now receive a 2nd argument:ActiveSupport::Callbacks#halted_callback_hook
now receive the name of the callbackbeing halted as second argument.
This change will allow you to differentiate which callbacks halted the chain
and act accordingly.
Edouard Chin
Support
prepend
withActiveSupport::Concern
.Allows a module with
extend ActiveSupport::Concern
to be prepended.Same as
included
, except only run when prepended.Deprecate using
Range#include?
method to check the inclusion of a valuein a date time range. It is recommended to use
Range#cover?
methodinstead of
Range#include?
to check the inclusion of a valuein a date time range.
Vishal Telangre
Support added for a
round_mode
parameter, in all number helpers. (See:BigDecimal::mode
.)Tom Lord
Array#to_sentence
no longer returns a frozen string.Before:
=> true
=> false
When an instance of
ActiveSupport::Duration
is converted to aniso8601
duration string, ifweeks
are mixed withdate
parts, theweek
part will be converted to days.This keeps the parser and serializer on the same page.
1 week, 4 days, 13 hours, 46 minutes, and 40.0 seconds
P11DT13H46M40S
11 days, 13 hours, 46 minutes, and 40 seconds
1 week
P1W
1 week
Add block support to
ActiveSupport::Testing::TimeHelpers#travel_back
.Tim Masliuchenko
Update
ActiveSupport::Messages::Metadata#fresh?
to work for cookies with expiry set whenActiveSupport.parse_json_times = true
.Christian Gregg
Support symbolic links for
content_path
inActiveSupport::EncryptedFile
.Takumi Shotoku
Improve
Range#===
,Range#include?
, andRange#cover?
to work with beginless (startless)and endless range targets.
Allen Hsu, Andrew Hodgkinson
Don't use
Process#clock_gettime(CLOCK_THREAD_CPUTIME_ID)
on Solaris.Iain Beeston
Prevent
ActiveSupport::Duration.build(value)
from creating instances ofActiveSupport::Duration
unlessvalue
is of typeNumeric
.Addresses the errant set of behaviours described in #37012 where
ActiveSupport::Duration
comparisons would fail confusinglyor return unexpected results when comparing durations built from instances of
String
.Before:
=> false
=> false
=> ArgumentError (comparison of ActiveSupport::Duration::Scalar with ActiveSupport::Duration failed)
=> ArgumentError (comparison of String with ActiveSupport::Duration failed)
=> TypeError (can't build an ActiveSupport::Duration from a String)
Add
ActiveSupport::Cache::Store#delete_multi
method to delete multiple keys from the cache store.Peter Zhu
Support multiple arguments in
HashWithIndifferentAccess
formerge
andupdate
methods, tofollow Ruby 2.6 addition.
Wojciech Wnętrzak
Allow initializing
thread_mattr_*
attributes via:default
option.Guilherme Mansur
Add
compact_blank
for those times when you want to remove #blank? values froman Enumerable (also
compact_blank!
on Hash, Array, ActionController::Parameters).Dana Sherson
Make ActiveSupport::Logger Fiber-safe.
Use
Fiber.current.__id__
inActiveSupport::Logger#local_level=
in orderto make log level local to Ruby Fibers in addition to Threads.
Example:
Before:
After:
Fixes #36752.
Alexander Varnin
Allow the
on_rotation
proc used when decrypting/verifying a message to bepassed at the constructor level.
Before:
After:
Edouard Chin
delegate_missing_to
would raise aDelegationError
if the objectdelegated to was
nil
. Now theallow_nil
option has been added to enablethe user to specify they want
nil
returned in this case.Matthew Tanous
truncate
would return the original string if it was too short to be truncatedand a frozen string if it were long enough to be truncated. Now truncate will
consistently return an unfrozen string regardless. This behavior is consistent
with
gsub
andstrip
.Before:
=> true
=> false
=> false
=> false
Active Model
Pass in
base
instead ofbase_class
to Error.human_attribute_nameThis is useful in cases where the
human_attribute_name
method dependson other attributes' values of the class under validation to derive what the
attribute name should be.
Filipe Sabella
Deprecate marshalling load from legacy attributes format.
Ryuta Kamizono
*_previously_changed?
accepts:from
and:to
keyword arguments like*_changed?
.=> true
Raise FrozenError when trying to write attributes that aren't backed by the database on an object that is frozen:
Josh Brody
Add
*_previously_was
attribute methods when dirty tracking. Example:DHH
Encapsulate each validation error as an Error object.
The
ActiveModel
’serrors
collection is now an array of these Errorobjects, instead of messages/details hash.
For each of these
Error
object, itsmessage
andfull_message
methodsare for generating error messages. Its
details
method would return error’sextra parameters, found in the original
details
hash.The change tries its best at maintaining backward compatibility, however
some edge cases won’t be covered, like
errors#first
will returnActiveModel::Error
and manipulatingerrors.messages
anderrors.details
hashes directly will have no effect. Moving forward,please convert those direct manipulations to use provided API methods instead.
The list of deprecated methods and their planned future behavioral changes at the next major release are:
errors#slice!
will be removed.errors#each
with thekey, value
two-arguments block will stop working, while theerror
single-argument block would returnError
object.errors#values
will be removed.errors#keys
will be removed.errors#to_xml
will be removed.errors#to_h
will be removed, and can be replaced witherrors#to_hash
.errors
itself as a hash will have no effect (e.g.errors[:foo] = 'bar'
).errors#messages
(e.g.errors.messages[:foo] = 'bar'
) will have no effect.errors#details
(e.g.errors.details[:foo].clear
) will have no effect.lulalala
Active Record
Only warn about negative enums if a positive form that would cause conflicts exists.
Fixes #39065.
Alex Ghiculescu
Change
attribute_for_inspect
to takefilter_attributes
in consideration.Rafael Mendonça França
Fix odd behavior of inverse_of with multiple belongs_to to same class.
Fixes #35204.
Tomoyuki Kai
Build predicate conditions with objects that delegate
#id
and primary key:Sean Doyle
Add
connected_to_many
API.This API allows applications to connect to multiple databases at once without switching all of them or implementing a deeply nested stack.
Before:
AnimalsRecord.connected_to(role: :reading) do
MealsRecord.connected_to(role: :reading) do
Dog.first # read from animals replica
Dinner.first # read from meals replica
Person.first # read from primary writer
end
end
After:
ActiveRecord::Base.connected_to_many([AnimalsRecord, MealsRecord], role: :reading) do
Dog.first # read from animals replica
Dinner.first # read from meals replica
Person.first # read from primary writer
end
Eileen M. Uchitelle, John Crepezzi
Add option to raise or log for
ActiveRecord::StrictLoadingViolationError
.Some applications may not want to raise an error in production if using
strict_loading
. This would allow an application to set strict loading to log for the production environment while still raising in development and test environments.Set
config.active_record.action_on_strict_loading_violation
to:log
errors instead of raising.Eileen M. Uchitelle
Allow the inverse of a
has_one
association that was previously autosaved to be loaded.Fixes #34255.
Steven Weber
Optimise the length of index names for polymorphic references by using the reference name rather than the type and id column names.
Because the default behaviour when adding an index with multiple columns is to use all column names in the index name, this could frequently lead to overly long index names for polymorphic references which would fail the migration if it exceeded the database limit.
This change reduces the chance of that happening by using the reference name, e.g.
index_my_table_on_my_reference
.Fixes #38655.
Luke Redpath
MySQL: Uniqueness validator now respects default database collation,
no longer enforce case sensitive comparison by default.
Ryuta Kamizono
Remove deprecated methods from
ActiveRecord::ConnectionAdapters::DatabaseLimits
.column_name_length
table_name_length
columns_per_table
indexes_per_table
columns_per_multicolumn_index
sql_query_length
joins_per_query
Rafael Mendonça França
Remove deprecated
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?
.Rafael Mendonça França
Remove deprecated
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?
.Rafael Mendonça França
Remove deprecated
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?
.Rafael Mendonça França
Remove deprecated
ActiveRecord::Base#update_attributes
andActiveRecord::Base#update_attributes!
.Rafael Mendonça França
Remove deprecated
migrations_path
argument inActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version
.Rafael Mendonça França
Remove deprecated
config.active_record.sqlite3.represent_boolean_as_integer
.Rafael Mendonça França
relation.create
does no longer leak scope to class level querying methodsin initialization block and callbacks.
Before:
After:
Ryuta Kamizono
Named scope chain does no longer leak scope to class level querying methods.
Before:
SELECT * FROM users WHERE name = 'John' AND name = 'David'
SELECT * FROM users WHERE name = 'David'
Remove deprecated methods from
ActiveRecord::DatabaseConfigurations
.fetch
each
first
values
[]=
Rafael Mendonça França
where.not
now generates NAND predicates instead of NOR.Before:
SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
SELECT * FROM users WHERE NOT (name == 'Jon' AND role == 'admin')
Remove deprecated
ActiveRecord::Result#to_hash
method.Rafael Mendonça França
Deprecate
ActiveRecord::Base.allow_unsafe_raw_sql
.Rafael Mendonça França
Remove deprecated support for using unsafe raw SQL in
ActiveRecord::Relation
methods.Rafael Mendonça França
Allow users to silence the "Rails couldn't infer whether you are using multiple databases..."
message using
config.active_record.suppress_multiple_database_warning
.Omri Gabay
Connections can be granularly switched for abstract classes when
connected_to
is called.This change allows
connected_to
to switch arole
and/orshard
for a single abstract class instead of all classes globally. Applications that want to use the new feature need to setconfig.active_record.legacy_connection_handling
tofalse
in their application configuration.Example usage:
Given an application we have a
User
model that inherits fromApplicationRecord
and aDog
model that inherits fromAnimalsRecord
.AnimalsRecord
andApplicationRecord
have writing and reading connections as well as sharddefault
,one
, andtwo
.Eileen M. Uchitelle, John Crepezzi
Allow double-dash comment syntax when querying read-only databases
James Adam
Add
values_at
method.Returns an array containing the values associated with the given methods.
=> ["Budget", "Jason"]
Fix
read_attribute_before_type_cast
to consider attribute aliases.Marcelo Lauxen
Support passing record to uniqueness validator
:conditions
callable:Eliot Sykes
BatchEnumerator#update_all
andBatchEnumerator#delete_all
now return thetotal number of rows affected, just like their non-batched counterparts.
Fixes #40287.
Eugene Kenny
Add support for PostgreSQL
interval
data type with conversion toActiveSupport::Duration
when loading records from database andserialization to ISO 8601 formatted duration string on save.
Add support to define a column in migrations and get it in a schema dump.
Optional column precision is supported.
To use this in 6.1, you need to place the next string to your model file:
To keep old behavior until 6.2 is released:
Example:
Andrey Novikov
Allow associations supporting the
dependent:
key to takedependent: :destroy_async
.:destroy_async
will enqueue a job to destroy associated records in the background.DHH, George Claghorn, Cory Gwin, Rafael Mendonça França, Adrianna Chang
Add
SKIP_TEST_DATABASE
environment variable to disable modifying the test database whenrails db:create
andrails db:drop
are called.Jason Schweier
connects_to
can only be called onActiveRecord::Base
or abstract classes.Ensure that
connects_to
can only be called fromActiveRecord::Base
or abstract classes. This protects the application from opening duplicate or too many connections.Eileen M. Uchitelle, John Crepezzi
All connection adapters
execute
now raisesActiveRecord::ConnectionNotEstablished
rather thanActiveRecord::StatementInvalid
when they encounter a connection error.Jean Boussier
Mysql2Adapter#quote_string
now raisesActiveRecord::ConnectionNotEstablished
rather thanActiveRecord::StatementInvalid
when it can't connect to the MySQL server.Jean Boussier
Add support for check constraints that are
NOT VALID
viavalidate: false
(PostgreSQL-only).Alex Robbin
Ensure the default configuration is considered primary or first for an environment
If a multiple database application provides a configuration named primary, that will be treated as default. In applications that do not have a primary entry, the default database configuration will be the first configuration for an environment.
Eileen M. Uchitelle
Allow
where
references association names as joined table name aliases.... FROM comments LEFT OUTER JOIN comments children ON ... WHERE children.label = 1
Support storing demodulized class name for polymorphic type.
Before Rails 6.1, storing demodulized class name is supported only for STI type
by
store_full_sti_class
class attribute.Now
store_full_class_name
class attribute can handle both STI and polymorphic types.Ryuta Kamizono
Deprecate
rails db:structure:{load, dump}
tasks and extendrails db:schema:{load, dump}
tasks to work with either:ruby
or:sql
format,depending on
config.active_record.schema_format
configuration value.fatkodima
Respect the
select
values for eager loading.Rails 6.0 (ignore the
select
values)Rails 6.1 (respect the
select
values)Allow attribute's default to be configured but keeping its own type.
Rails 6.0
Rails 6.1
Allow default to be configured for Enum.
Ryuta Kamizono
Deprecate YAML loading from legacy format older than Rails 5.0.
Ryuta Kamizono
Added the setting
ActiveRecord::Base.immutable_strings_by_default
, whichallows you to specify that all string columns should be frozen unless
otherwise specified. This will reduce memory pressure for applications which
do not generally mutate string properties of Active Record objects.
Sean Griffin, Ryuta Kamizono
Deprecate
map!
andcollect!
onActiveRecord::Result
.Ryuta Kamizono
Support
relation.and
for intersection as Set theory.Ryuta Kamizono
Merging conditions on the same column no longer maintain both conditions,
and will be consistently replaced by the latter condition in Rails 6.2.
To migrate to Rails 6.2's behavior, use
relation.merge(other, rewhere: true)
.Rails 6.1 (IN clause is replaced by merger side equality condition)
Rails 6.1 (both conflict conditions exists, deprecated)
Rails 6.1 with rewhere to migrate to Rails 6.2's behavior
Rails 6.2 (same behavior with IN clause, mergee side condition is consistently replaced)
Do not mark Postgresql MAC address and UUID attributes as changed when the assigned value only varies by case.
Peter Fry
Resolve issue with insert_all unique_by option when used with expression index.
When the
:unique_by
option ofActiveRecord::Persistence.insert_all
andActiveRecord::Persistence.upsert_all
was used with the name of an expression index, an errorwas raised. Adding a guard around the formatting behavior for the
:unique_by
corrects this.Usage:
Fixes #39516.
Austen Madden
Add basic support for CHECK constraints to database migrations.
Usage:
fatkodima
Add
ActiveRecord::Base.strict_loading_by_default
andActiveRecord::Base.strict_loading_by_default=
to enable/disable strict_loading mode by default for a model. The configuration's value is
inheritable by subclasses, but they can override that value and it will not impact parent class.
Usage:
=> ActiveRecord::StrictLoadingViolationError Exception: Developer is marked as strict_loading and Project cannot be lazily loaded.
Deprecate passing an Active Record object to
quote
/type_cast
directly.Ryuta Kamizono
Default engine
ENGINE=InnoDB
is no longer dumped to make schema more agnostic.Before:
After:
Ryuta Kamizono
Added delegated type as an alternative to single-table inheritance for representing class hierarchies.
See ActiveRecord::DelegatedType for the full description.
DHH
Deprecate aggregations with group by duplicated fields.
To migrate to Rails 6.2's behavior, use
uniq!(:group)
to deduplicate group fields.duplicated group fields, deprecated.
=> {
[1, 1] => 50,
[2, 2] => 60
}
use
uniq!(:group)
to deduplicate group fields.=> {
1 => 50,
2 => 60
}
Deprecate duplicated query annotations.
To migrate to Rails 6.2's behavior, use
uniq!(:annotate)
to deduplicate query annotations.duplicated annotations, deprecated.
SELECT accounts.* FROM accounts WHERE accounts.id = 3 /* david and mary / / david and mary */
use
uniq!(:annotate)
to deduplicate annotations.SELECT accounts.* FROM accounts WHERE accounts.id = 3 /* david and mary */
Resolve conflict between counter cache and optimistic locking.
Bump an Active Record instance's lock version after updating its counter
cache. This avoids raising an unnecessary
ActiveRecord::StaleObjectError
upon subsequent transactions by maintaining parity with the corresponding
database record's
lock_version
column.Fixes #16449.
Aaron Lipman
Support merging option
:rewhere
to allow mergee side condition to be replaced exactly.both conflict conditions exists
mergee side condition is replaced by rewhere
mergee side condition is replaced by rewhere option
Add support for finding records based on signed ids, which are tamper-proof, verified ids that can be
set to expire and scoped with a purpose. This is particularly useful for things like password reset
or email verification, where you want the bearer of the signed id to be able to interact with the
underlying record, but usually only within a certain time period.
DHH
Support
ALGORITHM = INSTANT
DDL option for index operations on MySQL.Ryuta Kamizono
Fix index creation to preserve index comment in bulk change table on MySQL.
Ryuta Kamizono
Allow
unscope
to be aware of table name qualified values.It is possible to unscope only the column in the specified table.
=> { false => 10 }
unscope both hidden columns
=> { false => 11, true => 1 }
unscope only comments.hidden column
=> { false => 11 }
Fix
rewhere
to truly overwrite collided where clause by new where clause.Before
After
Inspect time attributes with subsec and time zone offset.
akinomaeni, Jonathan Hefner
Deprecate passing a column to
type_cast
.Ryuta Kamizono
Deprecate
in_clause_length
andallowed_index_name_length
inDatabaseLimits
.Ryuta Kamizono
Support bulk insert/upsert on relation to preserve scope values.
Josef Šimánek, Ryuta Kamizono
Preserve column comment value on changing column name on MySQL.
Islam Taha
Add support for
if_exists
option for removing an index.The
remove_index
method can take anif_exists
option. If this is set to true an error won't be raised if the index doesn't exist.Eileen M. Uchitelle
Remove ibm_db, informix, mssql, oracle, and oracle12 Arel visitors which are not used in the code base.
Ryuta Kamizono
Prevent
build_association
fromtouching
a parent record if the record isn't persisted forhas_one
associations.Fixes #38219.
Josh Brody
Add support for
if_not_exists
option for adding index.The
add_index
method respectsif_not_exists
option. If it is set to trueindex won't be added.
Usage:
The
if_not_exists
option passed tocreate_table
also gets propagated to indexescreated within that migration so that if table and its indexes exist then there is no
attempt to create them again.
Prathamesh Sonpatki
Add
ActiveRecord::Base#previously_new_record?
to show if a record was new before the last save.Tom Ward
Support descending order for
find_each
,find_in_batches
, andin_batches
.Batch processing methods allow you to work with the records in batches, greatly reducing memory consumption, but records are always batched from oldest id to newest.
This change allows reversing the order, batching from newest to oldest. This is useful when you need to process newer batches of records first.
Pass
order: :desc
to yield batches in descending order. The default remainsorder: :asc
.Alexey Vasiliev
Fix
insert_all
with enum values.Fixes #38716.
Joel Blum
Add support for
db:rollback:name
for multiple database applications.Multiple database applications will now raise if
db:rollback
is call and recommend using thedb:rollback:[NAME]
to rollback migrations.Eileen M. Uchitelle
Relation#pick
now uses already loaded results instead of making another query.Eugene Kenny
Deprecate using
return
,break
orthrow
to exit a transaction block after writes.Dylan Thacker-Smith
Dump the schema or structure of a database when calling
db:migrate:name
.In previous versions of Rails,
rails db:migrate
would dump the schema of the database. In Rails 6, that holds true (rails db:migrate
dumps all databases' schemas), butrails db:migrate:name
does not share that behavior.Going forward, calls to
rails db:migrate:name
will dump the schema (or structure) of the database being migrated.Kyle Thompson
Reset the
ActiveRecord::Base
connection afterrails db:migrate:name
.When
rails db:migrate
has finished, it ensures theActiveRecord::Base
connection is reset to its original configuration. Going forward,rails db:migrate:name
will have the same behavior.Kyle Thompson
Disallow calling
connected_to
on subclasses ofActiveRecord::Base
.Behavior has not changed here but the previous API could be misleading to people who thought it would switch connections for only that class.
connected_to
switches the context from which we are getting connections, not the connections themselves.Eileen M. Uchitelle, John Crepezzi
Add support for horizontal sharding to
connects_to
andconnected_to
.Applications can now connect to multiple shards and switch between their shards in an application. Note that the shard swapping is still a manual process as this change does not include an API for automatic shard swapping.
Usage:
Given the following configuration:
config/database.yml
Read from shard one
Deprecate
spec_name
in favor ofname
on database configurations.The accessors for
spec_name
onconfigs_for
andDatabaseConfig
are deprecated. Please usename
instead.Deprecated behavior:
New behavior:
Eileen M. Uchitelle
Add additional database-specific rake tasks for multi-database users.
Previously,
rails db:create
,rails db:drop
, andrails db:migrate
were the only rails tasks that could operate on a singledatabase. For example:
With these changes,
rails db:schema:dump
,rails db:schema:load
,rails db:structure:dump
,rails db:structure:load
andrails db:test:prepare
can additionally operate on a single database. For example:Configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by WhiteSource Renovate. View repository job log here.