1. 07 10月, 2015 1 次提交
  2. 06 10月, 2015 3 次提交
  3. 05 10月, 2015 1 次提交
    • A
      [ci skip] Fix ActiveRecord::Relation#update documentation · dc96af15
      akihiro17 提交于
      * before
      
      ```
      people = Person.where(group: 'expert')
      people.update(group: 'masters')
      
      Note: Updating a large number of records will run a
      UPDATE query for each record, which may cause a performance
      issue. So if it is not needed to run callbacks for each update, it is
      preferred to use <tt>update_all</tt> for updating all records using
      a single query.
      ```
      
      * after
      
      ```
      people = Person.where(group: 'expert')
      people.update(group: 'masters')
      ```
      Note: Updating a large number of records will run an
      UPDATE query for each record, which may cause a performance
      issue. So if it is not needed to run callbacks for each update, it is
      preferred to use <tt>update_all</tt> for updating all records using
      a single query.
      dc96af15
  4. 04 10月, 2015 1 次提交
  5. 03 10月, 2015 1 次提交
  6. 02 10月, 2015 8 次提交
  7. 29 9月, 2015 5 次提交
  8. 28 9月, 2015 1 次提交
  9. 27 9月, 2015 3 次提交
  10. 26 9月, 2015 7 次提交
  11. 25 9月, 2015 9 次提交
    • S
      `validates_acceptance_of` shouldn't require a database connection · 37661bfc
      Sean Griffin 提交于
      The implementation of `attribute_method?` on Active Record requires
      establishing a database connection and querying the schema. As a general
      rule, we don't want to require database connections for any class macro,
      as the class should be able to be loaded without a database (e.g. for
      things like compiling assets).
      
      Instead of eagerly defining these methods, we do it lazily the first
      time they are accessed via `method_missing`. This should not cause any
      performance hits, as it will only hit `method_missing` once for the
      entire class.
      37661bfc
    • Y
      Quote prepared statements of `sanitize_sql_array` · 14d26521
      yui-knk 提交于
      Sure unquoted SQL code pass test, but this % style prepared statements
      are dangerous. Test codes and code examples are also "Rails" codes,
      so quote placeholder of prepared statements.
      14d26521
    • S
      Don't assert fractional seconds can be applied on unsupported adapters · bff28bab
      Sean Griffin 提交于
      This was passing prior to 20b177b7,
      because we were not properly applying our contract that
      `model.attr == model.tap(&:save).reload.attr` for this case. Now that
      that has been resolved, this test is invalid on some adapters
      bff28bab
    • S
      Apply subsecond precision on assignment when using TZ aware attributes · 20b177b7
      Sean Griffin 提交于
      When a time object was assigned to a datetime column, the decorator for
      TZ aware attributes wouldn't call super, so when using a database
      without support for subsecond precision, the nanosecond would not be
      truncated, leading to the value being marked as changed.
      
      Interestingly, this also shows our new implementation of dirty checking
      to be more robust than the old one (with less code and better
      performance! 🎉!!!)
      20b177b7
    • S
      Remove debug statements · 370ef3e8
      Sean Griffin 提交于
      They didn't help.
      370ef3e8
    • S
      Add a few debug statements to figure out the build failure · bd6bea0f
      Sean Griffin 提交于
      Nobody can replicate locally and the failure makes no sense
      bd6bea0f
    • S
      We still need to reset `@changed_attributes` in `changes_applied` · 45735502
      Sean Griffin 提交于
      When I removed the call to `super` to avoid the setting of
      `@previous_changes`, I forgot to duplicate the other part of that
      behavior, which led to failing tests
      45735502
    • S
      Improve the performance of `save` and friends · 136fc65c
      Sean Griffin 提交于
      The biggest source of the performance regression in these methods
      occurred because dirty tracking required eagerly materializing and type
      casting the assigned values. In the previous commits, I've changed dirty
      tracking to perform the comparisons lazily. However, all of this is moot
      when calling `save`, since `changes_applied` will be called, which just
      ends up eagerly materializing everything, anyway. With the new mutation
      tracker, it's easy to just compare the previous two hashes in the same
      lazy fashion.
      
      We will not have aliasing issues with this setup, which is proven by the
      fact that we're able to detect nested mutation.
      
      Before:
          User.create! 2.007k (± 7.1%) i/s -     10.098k
      
      After:
          User.create! 2.557k (± 3.5%) i/s -     12.789k
      
      Fixes #19859
      136fc65c
    • S
      Encapsulate a lot of the logic from `Dirty` in an object · 8a811c83
      Sean Griffin 提交于
      In order to improve the performance of dirty checking, we're going to
      need to duplicate all of the `previous_` methods in Active Model.
      However, these methods are basically the same as their non-previous
      counterparts, but comparing `@original_attributes` to
      `@previous_original_attributes` instead of `@attributes` and
      `@original_attributes`. This will help reduce that duplication.
      8a811c83