1. 01 4月, 2019 2 次提交
  2. 30 3月, 2019 3 次提交
    • R
      Fix callbacks on has_many :through associations (#33249) · 2e3bba3e
      Ryan Kerr 提交于
      When adding a child record via a has_many :through association,
      build_through_record would previously build the join record, and then
      assign the child record and source_type option to it.  Because the
      before_add and after_add callbacks are called as part of build, however,
      this caused the callbacks to receive incomplete records, specifically
      without the other end of the has_many :through association.  Collecting
      all attributes before building the join record ensures the callbacks
      receive the fully constructed record.
      2e3bba3e
    • D
      Add `ActiveRecord::Relation#extract_associated` for extracting associated record (#35784) · 4e076b03
      David Heinemeier Hansson 提交于
      * Add `ActiveRecord::Relation#extract_associated` for extracting associated records from a relation
      4e076b03
    • R
      Type cast falsy boolean symbols on boolean attribute as false · 2d12f800
      Ryuta Kamizono 提交于
      Before 34cc301f, type casting by boolean attribute when querying is a
      no-op, so finding by truthy boolean string (i.e.
      `where(value: "true") # => value = 'true'`) didn't work as expected
      (matches it to FALSE in MySQL #32624). By type casting is ensured, a
      value on boolean attribute is always serialized to TRUE or FALSE.
      
      In PostgreSQL, `where(value: :false) # => value = 'false'` was a valid
      SQL, so 34cc301f is a regresson for PostgreSQL since all symbol values
      are serialized as TRUE.
      
      I'd say using `:false` is mostly a developer's mistake (user's input
      basically comes as a string), but `:false` on boolean attribute is
      serialized as TRUE is not a desirable behavior for anybody.
      
      This allows falsy boolean symbols as false, i.e.
      `klass.create(value: :false).value? # => false` and
      `where(value: :false) # => value = FALSE`.
      
      Fixes #35676.
      2d12f800
  3. 27 3月, 2019 1 次提交
  4. 26 3月, 2019 4 次提交
    • R
      Fix CI failure due to remaining tagging records · b2b559c7
      Ryuta Kamizono 提交于
      `TRUNCATE TABLE posts` also resets `AUTO_INCREMENT`. If newly created a
      post, it is wrongly associated with remaining tagging records.
      To un-associate remaining tagging record, use `post.create_tagging!`
      instead.
      
      Fixes #35751.
      b2b559c7
    • Y
      Use `assert_queries(0)` instead of `assert_no_queries` to ignore metadata queries · 4dd3b2bd
      Yasuo Honda 提交于
      Fix #35665
      
      ```ruby
      $ ARCONN=mysql2 bin/test test/cases/scoping/named_scoping_test.rb test/cases/tasks/database_tasks_test.rb test/cases/associations/cascaded_eager_loading_test.rb test/cases/associations/eager_singularization_test.rb -n "/^(?:NamedScopingTest#(?:test_many_should_not_fire_query_if_scope_loaded)|ActiveRecord::DatabaseTasksDumpSchemaCacheTest#(?:test_dump_schema_cache)|CascadedEagerLoadingTest#(?:test_eager_association_loading_with_has_many_sti_and_subclasses)|EagerSingularizationTest#(?:test_eager_no_extra_singularization_has_many_through_belongs_to))$/" --seed 16818
      Using mysql2
      Run options: -n "/^(?:NamedScopingTest#(?:test_many_should_not_fire_query_if_scope_loaded)|ActiveRecord::DatabaseTasksDumpSchemaCacheTest#(?:test_dump_schema_cache)|CascadedEagerLoadingTest#(?:test_eager_association_loading_with_has_many_sti_and_subclasses)|EagerSingularizationTest#(?:test_eager_no_extra_singularization_has_many_through_belongs_to))$/" --seed 16818
      
      ...F
      
      Failure:
      CascadedEagerLoadingTest#test_eager_association_loading_with_has_many_sti_and_subclasses [/home/yahonda/git/rails/activerecord/test/cases/associations/cascaded_eager_loading_test.rb:124]:
      1 instead of 0 queries were executed.
      Queries:
      SHOW FULL FIELDS FROM `topics`.
      Expected: 0
        Actual: 1
      
      bin/test test/cases/associations/cascaded_eager_loading_test.rb:119
      
      Finished in 6.894609s, 0.5802 runs/s, 1.0153 assertions/s.
      4 runs, 7 assertions, 1 failures, 0 errors, 0 skips
      $
      ```
      4dd3b2bd
    • V
      Add saved changes helpers for store accessors · b574d283
      Vladimir Dementyev 提交于
      b574d283
    • P
      Add dirty methods for store accessors · 61a39ffc
      palkan 提交于
      61a39ffc
  5. 23 3月, 2019 1 次提交
    • S
      Fix unintended autosave on has_one through association · 3da0024d
      Sergiy Kukunin 提交于
      Fixes #35680
      
      The problem occurred, when a `has one through` association contains
      a foreign key (it belongs to the intermediate association).
      
      For example, Comment belongs to Post, Post belongs to Author, and Author
      `has_one :first_comment, through: :first_post`.
      
      In this case, the value of the foreign key is comparing with the original
      record, and since they are likely different, the association is marked
      as changed. So it updates every time when the origin record updates.
      3da0024d
  6. 22 3月, 2019 1 次提交
    • M
      Add Relation#annotate for SQL commenting · f4182580
      Matt Yoho 提交于
      This patch has two main portions:
      
      1. Add SQL comment support to Arel via Arel::Nodes::Comment.
      2. Implement a Relation#annotate method on top of that.
      
      == Adding SQL comment support
      
      Adds a new Arel::Nodes::Comment node that represents an optional SQL
      comment and teachers the relevant visitors how to handle it.
      
      Comment nodes may be added to the basic CRUD statement nodes and set
      through any of the four (Select|Insert|Update|Delete)Manager objects.
      
      For example:
      
          manager = Arel::UpdateManager.new
          manager.table table
          manager.comment("annotation")
          manager.to_sql # UPDATE "users" /* annotation */
      
      This new node type will be used by ActiveRecord::Relation to enable
      query annotation via SQL comments.
      
      == Implementing the Relation#annotate method
      
      Implements `ActiveRecord::Relation#annotate`, which accepts a comment
      string that will be appeneded to any queries generated by the relation.
      
      Some examples:
      
          relation = Post.where(id: 123).annotate("metadata string")
          relation.first
          # SELECT "posts".* FROM "posts" WHERE "posts"."id" = 123
          # LIMIT 1 /* metadata string */
      
          class Tag < ActiveRecord::Base
            scope :foo_annotated, -> { annotate("foo") }
          end
          Tag.foo_annotated.annotate("bar").first
          # SELECT "tags".* FROM "tags" LIMIT 1 /* foo */ /* bar */
      
      Also wires up the plumbing so this works with `#update_all` and
      `#delete_all` as well.
      
      This feature is useful for instrumentation and general analysis of
      queries generated at runtime.
      f4182580
  7. 21 3月, 2019 1 次提交
  8. 20 3月, 2019 1 次提交
    • K
      Bulk Insert: Reuse indexes for unique_by · 2ea5c240
      Kasper Timm Hansen 提交于
      I found `:unique_by` with `:columns` and `:where` inside it tough to
      grasp. The documentation only mentioned indexes and partial indexes.
      So why duplicate a model's indexes in an insert_all/upsert_all call
      when we can just look it up?
      
      This has the added benefit of raising if no index is found, such that
      people can't insert thousands of records without relying on an index
      of some form.
      2ea5c240
  9. 19 3月, 2019 1 次提交
  10. 18 3月, 2019 3 次提交
  11. 17 3月, 2019 3 次提交
  12. 16 3月, 2019 2 次提交
  13. 14 3月, 2019 1 次提交
  14. 13 3月, 2019 3 次提交
    • C
      Give GeneratedAttributeMethods module a name · 8ca3c286
      Chris Salzberg 提交于
      Currently GeneratedAttributeMethods is a module builder class, an
      instance of which is included in every AR class. OTOH,
      GeneratedAssociatedMethods is assigned to a constant under the model
      namespace. This is inconsistent and looks strange in the list of
      ancestors.
      
      There is no particular reason *not* to assign a constant for this (very
      important) module under the model namespace, so that's what this commit
      does.
      
      Previous to this change, ancestors for an AR class looked like this:
      
      ```
      => [User (call 'User.connection' to establish a connection),
       User::GeneratedAssociationMethods,
       #<ActiveRecord::AttributeMethods::GeneratedAttributeMethods:0x000055ace0f05b08>,
       ApplicationRecord(abstract),
       ApplicationRecord::GeneratedAssociationMethods,
       #<ActiveRecord::AttributeMethods::GeneratedAttributeMethods:0x000055ace093c460>,
       ActiveRecord::Base,
       ...
      ```
      
      With this change, they look like this:
      
      ```
      => [User (call 'User.connection' to establish a connection),
       User::GeneratedAssociationMethods,
       User::GeneratedAttributeMethods,
       ApplicationRecord(abstract),
       ApplicationRecord::GeneratedAssociationMethods,
       ApplicationRecord::GeneratedAttributeMethods,
       ActiveRecord::Base,
       ...
      ```
      
      The previously named `GeneratedAttributeMethods` module builder class is
      renamed `GeneratedAttributeMethodsBuilder` to emphasize that this is not
      a module but a class.
      8ca3c286
    • K
      Schema Cache: cache table indexes · 6e3a7d12
      Kasper Timm Hansen 提交于
      Useful to not query for indexes when an application uses schema cache.
      
      Ref https://github.com/rails/rails/pull/35546
      6e3a7d12
    • K
      Remove Marshal support from SchemaCache · 65f2eeaa
      Kasper Timm Hansen 提交于
      YAML has been used to serialize the schema cache ever since 2016 with
      Rails 5.1: 4c00c6ed
      65f2eeaa
  15. 11 3月, 2019 2 次提交
  16. 10 3月, 2019 4 次提交
  17. 08 3月, 2019 1 次提交
  18. 07 3月, 2019 5 次提交
  19. 06 3月, 2019 1 次提交