2021-01-21 21:32:55 -05:00
* Support hash config for `structure_dump_flags` and `structure_load_flags` flags
Now that Active Record supports multiple databases configuration
we need a way to pass specific flags for dump/load databases since
the options are not the same for different adapters.
We can use in the original way:
```ruby
ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = ['--no-defaults', '--skip-add-drop-table']
#or
ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = '--no-defaults --skip-add-drop-table'
```
And also use it passing a hash, with one or more keys, where the key
is the adapter
```ruby
ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = {
mysql2: ['--no-defaults', '--skip-add-drop-table'],
postgres: '--no-tablespaces'
}
```
*Gustavo Gonzalez*
2021-01-16 12:06:25 -05:00
* 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*
2021-01-19 16:12:18 -05:00
* Allow to opt-out of `strict_loading` mode on a per-record base.
This is useful when strict loading is enabled application wide or on a
model level.
```ruby
class User < ApplicationRecord
has_many :articles, strict_loading: true
end
user = User.first
user.articles
# => ActiveRecord::StrictLoadingViolationError
user = User.first
user.stict_loading!(false)
user.articles
# => #< ActiveRecord::Associations::CollectionProxy >
```
*Ayrton De Craene*
2020-11-23 18:32:11 -05:00
* Add `FinderMethods#sole` and `#find_sole_by` to find and assert the
presence of exactly one record.
Used when you need a single row, but also want to assert that there aren't
multiple rows matching the condition; especially for when database
constraints aren't enough or are impractical.
```ruby
Product.where(["price = %?", price]).sole
# => ActiveRecord::RecordNotFound (if no Product with given price)
# => #< Product . . . > (if one Product with given price)
# => ActiveRecord::SoleRecordExceeded (if more than one Product with given price)
2020-12-30 19:02:34 -05:00
user.api_keys.find_sole_by(key: key)
2020-11-23 18:32:11 -05:00
# as above
```
*Asherah Connor*
2020-12-29 07:11:16 -05:00
* Makes `ActiveRecord::AttributeMethods::Query` respect the getter overrides defined in the model.
2020-12-10 10:37:22 -05:00
Before:
```ruby
2020-12-30 00:44:02 -05:00
class User
def admin
false # Overriding the getter to always return false
2020-12-10 10:37:22 -05:00
end
2020-12-30 00:44:02 -05:00
end
2020-12-10 10:37:22 -05:00
2020-12-30 00:44:02 -05:00
user = User.first
user.update(admin: true)
2020-12-10 10:37:22 -05:00
2020-12-30 00:44:02 -05:00
user.admin # false (as expected, due to the getter overwrite)
user.admin? # true (not expected, returned the DB column value)
2020-12-10 10:37:22 -05:00
```
After this commit, `user.admin?` above returns false, as expected.
2020-12-30 00:44:02 -05:00
Fixes #40771 .
*Felipe*
2020-12-18 01:06:16 -05:00
* Allow delegated_type to be specified primary_key and foreign_key.
Since delegated_type assumes that the foreign_key ends with `_id` ,
`singular_id` defined by it does not work when the foreign_key does
not end with `id` . This change fixes it by taking into account
`primary_key` and `foreign_key` in the options.
*Ryota Egusa*
2020-09-17 16:12:58 -04:00
* Expose an `invert_where` method that will invert all scope conditions.
```ruby
class User
scope :active, -> { where(accepted: true, locked: false) }
end
User.active
# ... WHERE `accepted` = 1 AND `locked` = 0
User.active.invert_where
# ... WHERE NOT (`accepted` = 1 AND `locked` = 0)
```
*Kevin Deisz*
allow passing false to :polymorphic option of belongs_to
before this, passing false would raise the following error
because a condition in AR would disregard the option entirely
if false was passed.
ArgumentError: Unknown key: :polymorphic. Valid keys are:
:class_name, :anonymous_class, :primary_key, :foreign_key,
:dependent, :validate, :inverse_of, :strict_loading, :autosave,
:required, :touch, :counter_cache, :optional, :default
2020-12-17 22:38:36 -05:00
* Restore possibility of passing `false` to :polymorphic option of `belongs_to` .
Previously, passing `false` would trigger the option validation logic
to throw an error saying :polymorphic would not be a valid option.
*glaszig*
2020-12-17 14:41:00 -05:00
* Remove deprecated `database` kwarg from `connected_to` .
*Eileen M. Uchitelle* , *John Crepezzi*
2020-12-11 10:52:00 -05:00
* 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.
```ruby
add_index(:items, "to_tsvector('english', description)")
```
*fatkodima*
2020-11-24 12:38:49 -05:00
* Only warn about negative enums if a positive form that would cause conflicts exists.
Fixes #39065 .
*Alex Ghiculescu*
2020-11-19 17:20:45 -05:00
* Add option to run `default_scope` on all queries.
Previously, a `default_scope` would only run on select or insert queries. In some cases, like non-Rails tenant sharding solutions, it may be desirable to run `default_scope` on all queries in order to ensure queries are including a foreign key for the shard (ie `blog_id` ).
Now applications can add an option to run on all queries including select, insert, delete, and update by adding an `all_queries` option to the default scope definition.
```ruby
class Article < ApplicationRecord
default_scope -> { where(blog_id: Current.blog.id) }, all_queries: true
end
```
*Eileen M. Uchitelle*
2020-11-26 08:15:18 -05:00
* Add `where.associated` to check for the presence of an association.
```ruby
# Before:
account.users.joins(:contact).where.not(contact_id: nil)
# After:
account.users.where.associated(:contact)
```
Also mirrors `where.missing` .
*Kasper Timm Hansen*
2020-08-07 15:36:22 -04:00
* Allow constructors (`build_association` and `create_association` ) on
`has_one :through` associations.
*Santiago Perez Perret*
2020-04-14 10:33:56 -04:00
2020-12-02 18:37:26 -05:00
Please check [6-1-stable ](https://github.com/rails/rails/blob/6-1-stable/activerecord/CHANGELOG.md ) for previous changes.