aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/CHANGELOG.md
Commit message (Collapse)AuthorAgeFilesLines
* Rename the enum_{prefix,suffix} options to _{prefix,suffix}Robin Dupret2015-07-231-1/+1
| | | | | | This makes it more clear that they are reserved keywords and also it seems less redundant as the line already starts with the call to the `enum` method.
* Extra caller details added to ActiveRecord::RecordNotFoundSameer Rahmani2015-07-211-0/+16
| | | | | | | | | | | | | | | | ActiveRecord::RecordNotFound modified to store model name, primary_key and id of the caller model. It allows the catcher of this exception to make a better decision to what to do with it. For example consider this simple example: class SomeAbstractController < ActionController::Base rescue_from ActiveRecord::RecordNotFound, with: :redirect_to_404 private def redirect_to_404(e) return redirect_to(posts_url) if e.model == 'Post' raise end end
* Deprecate and rename the keys for association restrict_dependent_destroyRoque Pinel2015-07-201-0/+16
| | | | | | | | | | | | | | | | | Previously `has_one` and `has_many` associations were using the `one` and `many` keys respectively. Both of these keys have special meaning in I18n (they are considered to be pluralizations) so by renaming them to `has_one` and `has_many` we make the messages more explicit and most importantly they don't clash with linguistical systems that need to validate translation keys (and their pluralizations). The `:'restrict_dependent_destroy.one'` key should be replaced with `:'restrict_dependent_destroy.has_one'`, and `:'restrict_dependent_destroy.many'` with `:'restrict_dependent_destroy.has_many'`. [Roque Pinel & Christopher Dell]
* Fix state being carried over from previous transactionRoque Pinel2015-07-201-0/+14
| | | | | | | | | | | | | | | This clears the transaction record state when the transaction finishes with a `:committed` status. Considering the following example where `name` is a required attribute. Before we had `new_record?` returning `true` for a persisted record: ```ruby author = Author.create! name: 'foo' author.name = nil author.save # => false author.new_record? # => true ```
* Correctly ignore `mark_for_destruction` without `autosave`Sean Griffin2015-07-201-0/+7
| | | | | | | | | As per the docs, `mark_for_destruction` should do nothing if `autosave` is not set to true. We normally persist associations on a record no matter what if the record is a new record, but we were always skipping records which were `marked_for_destruction?`. Fixes #20882
* Fix counter_cache for polymorphic associationsStefan Kanev2015-07-191-0/+7
| | | | | | | | | | | | | | Also removes a false positive test that depends on the fixed bug: At this time, counter_cache does not work with polymorphic relationships (which is a bug). The test was added to make sure that no StaleObjectError is raised when the car is destroyed. No such error is currently raised because the lock version is not incremented by appending a wheel to the car. Furthermore, `assert_difference` succeeds because `car.wheels.count` does not check the counter cache, but the collection size. The test will fail if it is replaced with `car.wheels_count || 0`.
* Ensure cyclic associations w/ autosave don't cause duplicate errorsSean Griffin2015-07-181-0/+7
| | | | | | | | | | | | | | | | This code is so fucked. Things that cause this bug not to replicate: - Defining the validation before the association (we end up calling `uniq!` on the errors in the autosave validation) - Adding `accepts_nested_attributes_for` (I have no clue why. The only thing it does that should affect this is adds `autosave: true` to the inverse reflection, and doing that manually doesn't fix this). This solution is a hack, and I'm almost certain there's a better way to go about it, but this shouldn't cause a huge hit on validation times, and is the simplest way to get it done. Fixes #20874.
* Ensure that `ActionController::Parameters` can still be passed to ARSean Griffin2015-07-181-0/+7
| | | | | | | | | | | | | | | | | | | | | Since nested hashes are also instances of `ActionController::Parameters`, and we're explicitly looking to work with a hash for nested attributes, this caused breakage in several points. This is the minimum viable fix for the issue (and one that I'm not terribly fond of). I can't think of a better place to handle this at the moment. I'd prefer to use some sort of solution that doesn't special case AC::Parameters, but we can't use something like `to_h` or `to_a` since `Enumerable` adds both. While I've added a trivial test case for verifying this fix in isolation, we really need better integration coverage to prevent regressions like this in the future. We don't actually have a lot of great places for integration coverage at the moment, so I'm deferring it for now. Fixes #20922.
* Deprecate force association reload by passing truePrem Sichanugrist2015-07-151-0/+18
| | | | | | | | | | | | | | | | | | This is to simplify the association API, as you can call `reload` on the association proxy or the parent object to get the same result. For collection association, you can call `#reload` on association proxy to force a reload: @user.posts.reload # Instead of @user.posts(true) For singular association, you can call `#reload` on the parent object to clear its association cache then call the association method: @user.reload.profile # Instead of @user.profile(true) Passing a truthy argument to force association to reload will be removed in Rails 5.1.
* Replaced `ActiveSupport::Concurrency::Latch` with concurrent-ruby.Jerry D'Antonio2015-07-131-0/+5
| | | | | | | | | | The concurrent-ruby gem is a toolset containing many concurrency utilities. Many of these utilities include runtime-specific optimizations when possible. Rather than clutter the Rails codebase with concurrency utilities separate from the core task, such tools can be superseded by similar tools in the more specialized gem. This commit replaces `ActiveSupport::Concurrency::Latch` with `Concurrent::CountDownLatch`, which is functionally equivalent.
* Update CHANGELOG.mdDmitry Zudochkin2015-07-071-1/+1
|
* Correct through associations using scopesSean Griffin2015-06-301-0/+8
| | | | | | | | | | | | | | | | | | | | | | The changes introduced to through associations in c80487eb were quite interesting. Changing `relation.merge!(scope)` to `relation = relation.merge(scope)` should in theory never cause any changes in behavior. The subtle breakage led to a surprising conclusion. The old code wasn't doing anything! Since `merge!` calls `instance_exec` when given a proc, and most scopes will look something like `has_many :foos, -> { where(foo: :bar) }`, if we're not capturing the return value, it's a no-op. However, removing the `merge` causes `unscope` to break. While we're merging in the rest of the chain elsewhere, we were never merging in `unscope` values, causing a breakage on associations where a default scope was being unscoped in an association scope (yuk!). This is subtly related to #20722, since it appears we were previously relying on this mutability. Fixes #20721. Fixes #20727.
* `dump_schema_after_migration` applies migration tasks other than db:migrateYves Senn2015-06-301-0/+7
| | | | | | | | | | | | | Closes #20743. The task `db:_dump` now only dumps the schema if `ActiveRecord::Base.dump_schema_after_migration` is true. This has effects: - `db:migrate:up` - `db:migrate:down` - `db:forward` - `db:rollback`
* Add reversible syntax for change_column_defaultPrem Sichanugrist2015-06-261-0/+12
| | | | | | | | | | | | | Passing `:from` and `:to` to `change_column_default` makes this command reversible as user has defined its previous state. So, instead of having the migration command as: change_column_default(:posts, :state, "draft") They can write it as: change_column_default(:posts, :state, from: nil, to: "draft")
* Merge pull request #20552 from jamesdabbs/belongs-to-polymorphic-force-reloadYves Senn2015-06-231-0/+7
|\ | | | | | | Fix `undefined method uncached` for polymorphic belongs_to #20426
* \ Merge pull request #20545 from dcrec1/20541Yves Senn2015-06-231-0/+7
|\ \ | | | | | | | | | thrown ActiveRecord::AssociationTypeMismatch when assigning a wrong value for a namespaced association
| * | thrown ActiveRecord::AssociationTypeMismatch when assigning a wrong value ↵Diego Carrion2015-06-221-0/+7
|/ / | | | | | | | | for a namespaced association fixes #20541
* | AR absence validator respects `marked_for_destruction?`. Closes #20449.Yves Senn2015-06-221-0/+6
| | | | | | | | Associated objects that were marked for destruction are considered absent.
* | Include `Enumerable` in `ActiveRecord::Relation`Sean Griffin2015-06-191-0/+4
| | | | | | | | | | | | | | | | | | | | | | After discussing, we've decided it makes more sense to include it. We're already forwarding every conflicting method to `to_a`, and there's no conflation of concerns. `Enumerable` has no mutating methods, and it just allows us to simplify the code. No existing methods will have a change in behavior. Un-overridden Enumerable methods will simply delegate to `each`. [Sean Griffin & bogdan]
* | Use `Enumerable#sum` on `ActiveRecord::Relation` when a block is givenSean Griffin2015-06-191-0/+4
| | | | | | | | | | | | | | | | This matches our behavior in other cases where useful enumerable methods might have a different definition in `Relation`. Wanting to actually enumerate over the records in this case is completely reasonable, and wanting `.sum` is reasonable for the same reason it is on `Enumerable` in the first place.
* | Merge pull request #19843 from marshall-lee/explain_cte_queriesYves Senn2015-06-191-0/+4
|\ \ | | | | | | | | | | | | | | | | | | Let WITH (CTE) queries be explainable Conflicts: activerecord/CHANGELOG.md
| * | Let WITH (CTE) queries be explainableVladimir Kochnev2015-05-281-0/+4
| | |
* | | make `remove_index :table, :column` reversible.Yves Senn2015-06-151-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | This used to raise a `IrreversibleMigration` error (since #10437). However since `remove_index :table, :column` is probably the most basic use-case we should make it reversible again. Conflicts: activerecord/CHANGELOG.md
* | | quick pass over changelogs. [ci skip]Yves Senn2015-06-151-3/+4
| |/ |/|
* | Don't crash when mutating attributes in a getterSean Griffin2015-06-121-0/+7
| | | | | | | | | | | | | | | | | | | | | | If a getter has side effects on the DB, `changes_applied` will be called twice. The second time will try and remove the changed attributes cache, and will crash because it's already been unset. This also demonstrates that we shouldn't assume that calling getters won't change the value of `changed_attributes`, and we need to clear the cache if an attribute is modified. Fixes #20531.
* | Merge pull request #20226 from EpicH0liday/reversible-remove-foreign-keyYves Senn2015-06-121-0/+5
|\ \ | | | | | | | | | | | | | | | | | | Make remove_foreign_key reversible Conflicts: activerecord/CHANGELOG.md
| * | Add an invert method for remove_foreign_keyAster Ryan2015-06-111-0/+5
| | |
* | | Add enum prefix/suffix option to enum definitionIgor Kapkov2015-06-121-0/+6
|/ / | | | | | | Fixes #17511 and #17415
* | Credit the author of #20515 in the previous commitSean Griffin2015-06-111-1/+1
| | | | | | | | [Sean Griffin & jmondo]
* | Correctly handle array columns with defaults in the schema dumperSean Griffin2015-06-111-0/+6
| | | | | | | | | | | | | | | | | | If the subtype provides custom schema dumping behavior, we need to defer to it. We purposely choose not to handle any values other than an array (which technically should only ever be `nil`, but I'd rather code defensively here). Fixes #20515.
* | Return a `Point` object from the PG Point typeSean Griffin2015-06-051-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces a deprecation cycle to change the behavior of the default point type in the PostgreSQL adapter. The old behavior will continue to be available for the immediate future as `:legacy_point`. The current behavior of returning an `Array` causes several problems, the most significant of which is that we cannot differentiate between an array of points, and a point itself in the case of a column with the `point[]` type. The attributes API gives us a reasonable way to have a proper deprecation cycle for this change, so let's take advantage of it. If we like this change, we can also add proper support for the other geometric types (line, lseg, box, path, polygon, and circle), all of which are just aliases for string today. Fixes #20441
* | minor formatting changes in changelogs. [ci skip]Yves Senn2015-05-311-6/+6
| |
* | Ensure symbols passed to `select` are always quotedSean Griffin2015-05-301-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Our general contract in Active Record is that strings are assumed to be SQL literals, and symbols are assumed to reference a column. If a from clause is given, we shouldn't include the table name, but we should still quote the value as if it were a column. Upon fixing this, the tests were still failing on SQLite. This was because the column name being returned by the query was `"\"join\""` instead of `"join"`. This is actually a bug in SQLite that was fixed a long time ago, but I was using the version of SQLite included by OS X which has this bug. Since I'm guessing this will be a common case for contributors, I also added an explicit check with a more helpful error message. Fixes #20360
* | Add docs and changelog entry for 73aab03 [ci skip]Sean Griffin2015-05-301-0/+5
| |
* | Add CHANGELOG entry for #17654 [ci skip]Ryuta Kamizono2015-05-301-0/+13
|/
* Give credit to extra contributor for Base.reload fixShane Hender2015-05-281-2/+2
|
* Add collation support for string and text columns in SQLite3Akshay Vishnoi2015-05-281-0/+15
|
* Merge pull request #20171 from georgeclaghorn/enums-in-fixturesRafael Mendonça França2015-05-271-0/+9
|\ | | | | | | Allow the use of symbols or strings to specify enum values in test fixtures
| * Resolve enums in test fixturesGeorge Claghorn2015-05-271-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, values for columns backing Active Record enums must be specified as integers in test fixtures: awdr: title: "Agile Web Development with Rails" status: 2 rfr: title: "Ruby for Rails" status: <%= Book.statuses[:proposed] %> This is potentially confusing, since enum values are typically specified as symbols or strings in application code. To resolve the confusion, this change permits the use of symbols or strings to specify enum values: awdr: status: :published It is compatible with fixtures that specify enum values as integers.
* | Merge pull request #19886 from henders/henders/reload_wipe_query_cacheRafael Mendonça França2015-05-271-0/+4
|\ \ | |/ |/| | | Cause ActiveRecord::Base::reload to also ignore the QueryCache.
* | Merge pull request #20269 from wojobucco/masterRafael Mendonça França2015-05-271-0/+4
|\ \ | | | | | | | | | Changed mysqldump to include sprocs and functions
* | | add `extend` option on `has_and_belongs_to_many`.keepcosmos2015-05-261-0/+4
| | |
* | | deprecate `Relation#uniq` use `Relation#distinct` instead.Yves Senn2015-05-261-0/+6
|/ / | | | | | | | | | | | | | | | | See #9683 for the reasons we switched to `distinct`. Here is the discussion that triggered the actual deprecation #20198. `uniq`, `uniq!` and `uniq_value` are still around. They will be removed in the next minor release after Rails 5.
* | Pass over CHANGELOGS [ci skip]Prathamesh Sonpatki2015-05-161-2/+3
| |
* | Merge branch 'sti-subclass-from-attributes' of ↵Yves Senn2015-05-131-0/+5
|\ \ | | | | | | | | | | | | | | | | | | https://github.com/agrobbin/rails into agrobbin-sti-subclass-from-attributes Conflicts: activerecord/CHANGELOG.md
| * | allow setting of a demodulized class name when using STIAlex Robbin2015-05-111-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If your STI class looks like this: ```ruby class Company < ActiveRecord::Base self.store_full_sti_class = false class GoodCo < Company end class BadCo < Company end end ``` The expectation (which is valid) is that the `type` in the database is saved as `GoodCo` or `BadCo`. However, another expectation should be that setting `type` to `GoodCo` would correctly instantiate the object as a `Company::GoodCo`. That second expectation is what this should fix.
* | | Add full set of MySQL CLI options to support SSL authentication when using ↵Alex Coomans2015-05-121-0/+6
|/ / | | | | | | db:structure dump and load
* | Merge pull request #19994 from kamipo/dump_indexes_in_create_tableRafael Mendonça França2015-05-031-0/+7
|\ \ | | | | | | | | | Dump indexes in `create_table` instead of `add_index`
| * | Dump indexes in `create_table` instead of `add_index`Ryuta Kamizono2015-05-031-0/+7
| | | | | | | | | | | | | | | If the adapter supports indexes in create table, generated SQL is slightly more efficient.
* | | Merge pull request #17569 from kamipo/dump_table_optionsRafael Mendonça França2015-05-031-0/+4
|\ \ \ | | | | | | | | | | | | Correctly dump `:options` on `create_table` for MySQL