aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations
Commit message (Collapse)AuthorAgeFilesLines
* Don't cache `scope_for_create`Ryuta Kamizono2017-07-162-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | I investigated where `scope_for_create` is reused in tests with the following code: ```diff --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -590,6 +590,10 @@ def where_values_hash(relation_table_name = table_name) end def scope_for_create + if defined?(@scope_for_create) && @scope_for_create + puts caller + puts "defined" + end @scope_for_create ||= where_values_hash.merge!(create_with_value.stringify_keys) end ``` It was hit only `test_scope_for_create_is_cached`. This means that `scope_for_create` will not be reused in normal use cases. So we can remove caching `scope_for_create` to respect changing `where_clause` and `create_with_value`.
* Fix `create_with` using both string and symbolRyuta Kamizono2017-07-163-9/+7
| | | | | | | This is related with #27680. Since `where_values_hash` keys constructed by `where` are string, so we need `stringify_keys` to `create_with_value` before merging it.
* Remove useless `aliased_table_name` in `JoinDependency`Ryuta Kamizono2017-07-154-18/+1
| | | | If `table.table_alias` is not nil, it is enough to use `table` simply.
* Fix eager loading association with scope including joinsRyuta Kamizono2017-07-041-4/+10
| | | | Fixes #28324.
* Fix preloading association with scope including joinsRyuta Kamizono2017-07-043-49/+25
|
* Remove unused `association_key` and `table` methods in `Preloader::Association`Ryuta Kamizono2017-07-041-10/+0
| | | | These are no longer used since b98668decb9712f26118de57623fd15d7d28646d.
* Merge branch 'master' into require_relative_2017Xavier Noria2017-07-022-4/+12
|\
| * Revert "Merge pull request #29540 from kirs/rubocop-frozen-string"Matthew Draper2017-07-0235-35/+0
| | | | | | | | | | This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
| * Merge pull request #29540 from kirs/rubocop-frozen-stringMatthew Draper2017-07-0235-0/+35
| |\ | | | | | | | | | Enforce frozen string in Rubocop
| | * Enforce frozen string in RubocopKir Shatrov2017-07-0135-0/+35
| | |
| * | Merge pull request #29506 from pat/frozen-string-literalsMatthew Draper2017-07-021-2/+1
| |\ \ | | | | | | | | | | | | Make ActiveSupport frozen-string-literal friendly.
| | * | Make ActiveRecord frozen string literal friendly.Pat Allan2017-06-201-2/+1
| | | |
| * | | Merge pull request #29631 from kamipo/should_be_clear_association_idsMatthew Draper2017-07-011-2/+11
| |\ \ \ | | | | | | | | | | Should be clear `@association_ids` when joined newly associated record
| | * | | Should be clear `@association_ids` when joined newly associated recordRyuta Kamizono2017-06-301-2/+11
| | | |/ | | |/| | | | | | | | | Fixes #29627.
* | / | [Active Record] require => require_relativeAkira Matsuda2017-07-013-3/+3
|/ / /
* / / Delete stale comment for `AR::Associations::Builder::CollectionAssociation`fatkodima2017-07-011-2/+0
|/ /
* | Merge pull request #29616 from kamipo/remove_unused_aliased_table_nameRafael França2017-06-291-8/+0
|\ \ | | | | | | Remove unused `aliased_table_name` in `Association`
| * | Remove unused `aliased_table_name` in `Association`Ryuta Kamizono2017-06-291-8/+0
| | | | | | | | | | | | | | | | | | | | | `aliased_table_name` in `Association` was added at a3502c4. `aliased_table_name` in `JoinDependency` (added at 55854c4) is used, but it looks like that added one in `Association` is never used from the beginning.
* | | Merge pull request #29129 from kamipo/prevent_extra_through_scopeRafael França2017-06-281-2/+4
|\ \ \ | |/ / |/| | Prevent extra `through_scope`
| * | Prevent extra `through_scope`Ryuta Kamizono2017-05-181-2/+4
| | | | | | | | | | | | We can reuse `through_scope` for `reset_association`.
* | | Merge pull request #29610 from ↵Rafael França2017-06-284-7/+7
|\ \ \ | | | | | | | | | | | | | | | | kamipo/dont_passing_klass_connection_to_association_scope Don't passing `klass.connection` to `AssociationScope`
| * | | Don't passing `klass.connection` to `AssociationScope`Ryuta Kamizono2017-06-294-7/+7
| | | | | | | | | | | | | | | | | | | | Passing `klass.connection` is redundant because `AssociationScope` is passed an association itself and an association has `klass`.
* | | | Merge pull request #29604 from ↵Rafael França2017-06-281-4/+1
|\ \ \ \ | |/ / / |/| | | | | | | | | | | kamipo/fix_ids_reader_to_respect_case_sensitive_pk Fix `ids_reader` to respect case sensitive primary key
| * | | Fix `ids_reader` to respect case sensitive primary keyRyuta Kamizono2017-06-281-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ```ruby car = Car.create!(name: "Tofaş") # Before car.bulb_ids # => SELECT "bulbs".ID FROM "bulbs" WHERE "bulbs"."name" = $1 AND "bulbs"."car_id" = $2 [["name", "defaulty"], ["car_id", 3]] # After car.bulb_ids # => SELECT "bulbs"."ID" FROM "bulbs" WHERE "bulbs"."name" = $1 AND "bulbs"."car_id" = $2 [["name", "defaulty"], ["car_id", 3]] ```
* | | | Merge pull request #29593 from kratob/masterEileen M. Uchitelle2017-06-281-0/+5
|\ \ \ \ | |/ / / |/| | | ActiveRecord: do not create "has many through" records that have been removed
| * | | ActiveRecord: do not create "has many through" records that have been removedTobias Kraze2017-06-281-0/+5
| | | | | | | | | | | | | | | | | | | | If a record was built on a HasManyThroughAssociation, then removed, and then the record was saved, the removed record would be created anyways.
* | | | Merge pull request #29589 from kamipo/refactor_join_scopeRafael França2017-06-271-47/+3
|\ \ \ \ | | | | | | | | | | Refactor join dependency to move building constraints to `join_scope` in `Reflection`
| * | | | Move building constraint to `join_scope` in `Reflection`Ryuta Kamizono2017-06-271-39/+3
| | | | |
| * | | | Move constructing polymorphic type to `join_scope` in `Reflection`Ryuta Kamizono2017-06-271-10/+2
| |/ / /
* / / / Skip instantiating `NullPreloader` if `assoc.klass` is nilRyuta Kamizono2017-06-271-11/+3
|/ / / | | | | | | | | | | | | Simply we can skip instantiating `NullPreloader` if `assoc.klass` is nil.
* | | Merge pull request #29557 from kamipo/extract_build_scope_and_predicate_builderRafael França2017-06-262-13/+4
|\ \ \ | | | | | | | | Extract `build_scope` and `predicate_builder` in `Reflection`
| * | | Move constructing join scope to `Reflection`Ryuta Kamizono2017-06-261-9/+1
| | | |
| * | | Extract `build_scope` and `predicate_builder` in `Reflection`Ryuta Kamizono2017-06-242-5/+4
| | | |
* | | | Merge pull request #29568 from kamipo/ensure_using_correct_alias_trackerRafael França2017-06-263-14/+18
|\ \ \ \ | | | | | | | | | | Ensure that using correct alias tracker
| * | | | The AliasTracker#aliased_table_for needs the type caster for the joined ↵Ray Zane2017-06-253-14/+18
| |/ / / | | | | | | | | | | | | association, not the join root
* | | | Merge pull request #29511 from jhawthorn/clear_offsets_cache_on_collection_proxyRafael França2017-06-261-0/+1
|\ \ \ \ | |/ / / |/| | | Rails 5.1.2.rc1 regression - Clear offset cache on CollectionProxy reset/reload
| * | | Move clearing of @offsets cache to reset_scopeJohn Hawthorn2017-06-211-2/+1
| | | |
| * | | Clear offset cache on CollectionProxy reset/reloadJohn Hawthorn2017-06-201-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `@offsets` cache is used by FinderMethods to cache records found by find_nth. This cache is cleared in AR::Relation#reset, but not in CollectionProxy#reset or CollectionProxy#reload. Because of this, since #29098, calling #first/#find_nth/etc after calling #reload or #reset on an association could return a stale record. This is an issue both when the full association target is loaded and when the item is loaded in #find_nth. This commit solves the problem by clearing the `@offsets` cache in CollectionProxy#reset and CollectionProxy#reload.
* | | | Keep INNER JOIN when merging relationsMaxime Lapointe2017-06-201-3/+3
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doing `Author.joins(:posts).merge(Post.joins(:comments))` does this `SELECT ... INNER JOIN posts ON... LEFT OUTER JOIN comments ON...` instead of doing `SELECT ... INNER JOIN posts ON... INNER JOIN comments ON...`. This behavior is unexpected and makes little sense as, basically, doing `Post.joins(:comments)` means I want posts that have comments. Turning it to a LEFT JOIN means I want posts and join the comments data, if any. We can see this problem directly in the existing tests. The test_relation_merging_with_merged_joins_as_symbols only does joins from posts to comments to ratings while the ratings fixture isn't loaded, but the count is non-zero.
* | / Prevent extra `scope` construction in `find_target`Ryuta Kamizono2017-06-183-3/+5
| |/ |/| | | | | Because constructing `scope` is a little expensive.
* | Raise on create for singular association when parent is unpersistedAlex Kitchens2017-06-081-0/+4
| | | | | | | | | | | | A collection association will raise on `#create_association` when the parent is unpersisted. A singular association should do the same. This addresses issue #29219.
* | Don't expose methods and attrs for internal usageRyuta Kamizono2017-05-304-8/+10
| |
* | Merge pull request #29098 from kamipo/fix_association_with_extension_issuesMatthew Draper2017-05-304-26/+22
|\ \ | | | | | | | | | Fix association with extension issues
| * | Extract `default_extensions` to avoid `klass.all`Ryuta Kamizono2017-05-301-1/+1
| | | | | | | | | | | | | | | As @matthewd's suggestion, if `klass` has no default scope, it will more faster.
| * | Cache the association proxy objectRyuta Kamizono2017-05-282-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some third party modules expects that association returns same proxy object each time (e.g. for stubbing collection methods: https://github.com/rspec/rspec-rails/issues/1817). So I decided that cache the proxy object and reset scope in the proxy object each time. Related context: https://github.com/rails/rails/commit/c86a32d7451c5d901620ac58630460915292f88b#commitcomment-2784312
| * | Fix association with extension issuesRyuta Kamizono2017-05-283-22/+14
| | | | | | | | | | | | | | | | | | | | | | | | This fixes the following issues. * `association_scope` doesn't include `default_scope`. Should use `scope` instead. * We can't use `method_missing` for customizing existing method. * We can't use `relation_delegate_class` for sharing extensions. Should extend per association.
* | | Remove unused `Association#interpolate`Ryuta Kamizono2017-05-281-8/+0
|/ / | | | | | | Using `Association#interpolate` was removed since #11251.
* | Merge pull request #29174 from kamipo/remove_unused_join_part_nameMatthew Draper2017-05-241-4/+0
|\ \ | | | | | | Remove unused `JoinPart#name`
| * | Remove unused `JoinPart#name`Ryuta Kamizono2017-05-221-4/+0
| |/
* / Refactor making join constraintsRyuta Kamizono2017-05-231-23/+6
|/ | | | | The only difference between `make_inner_joins` and `make_left_outer_joins` is the `join_type`.