1. 23 12月, 2014 24 次提交
    • D
      Fixing numeric attrs when set to same negative value · 2859341c
      Daniel Fox 提交于
      This bug occurs when an attribute of an ActiveRecord model is an
      ActiveRecord::Type::Integer type or a ActiveRecord::Type::Decimal type (or any
      other type that includes the ActiveRecord::Type::Numeric module. When the value
      of the attribute is negative and is set to the same negative value, it is marked
      as changed.
      
      Take the following example of a Person model with the integer attribute age:
      
          class Person < ActiveRecord::Base
            # age          :integer(4)
          end
      
      The following will produce the error:
      
          person = Person.new(age: -1)
          person.age = -1
          person.changes
          => { "age" => [-1, -1] }
          person.age_changed?
          => true
      
      The problematic line is here:
      
          module ActiveRecord
            module Type
              module Numeric
                ...
      
                def non_numeric_string?(value)
                  # 'wibble'.to_i will give zero, we want to make sure
                  # that we aren't marking int zero to string zero as
                  # changed.
                  value.to_s !~ /\A\d+\.?\d*\z/
                end
              end
            end
          end
      
      The regex match doesn't accept numbers with a leading '-'.
      2859341c
    • S
      Merge pull request #18158 from YayConnolly/master · 38e9f5b1
      Sean Griffin 提交于
      Describe gotcha for 'status' option [ci skip]
      38e9f5b1
    • J
      Describe gotcha for 'status' option [ci skip] · 2ad466b8
      J Connolly 提交于
      2ad466b8
    • S
      Merge pull request #18156 from claudiob/better-record-identifier-tests · d9d865aa
      Sean Griffin 提交于
      Better tests for AV::RecordIdentifier
      d9d865aa
    • C
      Better tests for AV::RecordIdentifier · b26338e8
      claudiob 提交于
      This commit intends to clarify the scope of ActionView::RecordIdentifier
      methods `dom_id` and `dom_class`.
      
      Most of the current documentation comes from da257eb8 (7 years ago) when
      the decoupling of ActionView, ActiveRecord and ActiveModel was not a concern.
      
      Since then, steps have been taken to reach such decoupling.
      Therefore I think it's important to show that ActionView::RecordIdentifier
      **does not strictly depend on the ActiveRecord API**:
      any class `Post` implementing `post.to_key` and `post.model_name.param_key`
      will work.
      
      This commit adds a test to prove that ActionView::RecordIdentifier methods
      can also be used on objects that do not subclass ActiveRecord::Base.
      b26338e8
    • S
      Merge pull request #18147 from andreynering/guides-line-breaks-fix · 8259d795
      Sean Griffin 提交于
      Do not use line breaks on notes [ci skip]
      8259d795
    • S
      Improve the performance of reading belongs_to associations · be2b98b4
      Sean Griffin 提交于
      `ActiveRecord::Base#[]` has overhead that was introduced in 4.2. The
      `foo["id"]` working with PKs other than ID isn't really a case that we
      want to support publicly, but deprecating was painful enough that we
      avoid it. `_read_attribute` was introduced as the faster alternative for
      use internally. By using that, we can save a lot of overhead. We also
      save some overhead by reading the attribute one fewer times in
      `stale_state`.
      
      Fixes #18151
      be2b98b4
    • S
      Don't perform statement caching for `find` when called from a scope · fb160f6e
      Sean Griffin 提交于
      If there is a method defined such as `find_and_do_stuff(id)`, which then
      gets called on an association, we will perform statement caching and the
      parent ID will not change on subsequent calls.
      
      Fixes #18117
      fb160f6e
    • S
      Don't calculate all in-place changes to determine if attribute_changed? · 18ae0656
      Sean Griffin 提交于
      Calling `changed_attributes` will ultimately check if every mutable
      attribute has changed in place. Since this gets called whenever an
      attribute is assigned, it's extremely slow. Instead, we can avoid this
      calculation until we actually need it.
      
      Fixes #18029
      18ae0656
    • S
      Don't wrap `create_table` in a transaction for tests which run on MySQL · 84927431
      Sean Griffin 提交于
      PG will warn without it, but mysql2 errors out.
      84927431
    • S
      Add test missed by a03ea684 · b7d7e0b1
      Sean Griffin 提交于
      b7d7e0b1
    • S
      Use the new `foreign_key` option on `references` in generators · a03ea684
      Sean Griffin 提交于
      Changes `rails g model Post user:references` from
      
          def change
            create_table :posts do |t|
              t.references :user, index: true
            end
      
            add_foreign_key :posts, :users
          end
      
      to
      
          def change
            create_table :posts do |t|
              t.references :user, index: true, foreign_key: true
            end
          end
      
      Changes `rails g migration add_user_to_posts user:references` from
      
          def change
            add_reference :posts, :users, index: true
            add_foreign_key :posts, :users
          end
      
      to
      
          def change
            add_reference :posts, :users, index: true, foreign_key: true
          end
      a03ea684
    • S
      Add `foreign_key` as an option to `references` for `change_table` · 82afeaf2
      Sean Griffin 提交于
      This has the same comments as 9af90ffa00ba35bdee888e3e1ab775ba0bdbe72c,
      however it affects the `add_reference` method, and `t.references` in the
      context of a `change_table` block.
      
      There is a lot of duplication of code between creating and updating
      tables. We should re-evaluate the structure of this code from a high
      level so changes like this don't need to be made in two places. (Note to
      self)
      82afeaf2
    • S
      Convert `add_references` to use kwargs · 68a6c8ec
      Sean Griffin 提交于
      While we still aren't accepting PRs that only make changes like this,
      it's fine when we're actively working on a method if it makes our lives
      easier.
      68a6c8ec
    • S
      Add a `foreign_key` option to `references` while creating the table · 99a6f9e6
      Sean Griffin 提交于
      Rather than having to do:
      
          create_table :posts do |t|
            t.references :user
          end
      
          add_foreign_key :posts, :users
      
      You can instead do:
      
          create_table :posts do |t|
            t.references :user, foreign_key: true
          end
      
      Similar to the `index` option, you can also pass a hash. This will be
      passed as the options to `add_foreign_key`. e.g.:
      
          create_table :posts do |t|
            t.references :user, foreign_key: { primary_key: :other_id }
          end
      
      is equivalent to
      
          create_table :posts do |t|
            t.references :user
          end
      
          add_foreign_key :posts, :users, primary_key: :other_id
      99a6f9e6
    • S
      Convert `references` to kwargs · a9c0c462
      Sean Griffin 提交于
      While we aren't taking PRs with these kinds of changes just yet, they
      are fine if we're actively working on the method and it makes things
      easier.
      a9c0c462
    • S
      Skip byebug on all non-MRI rubies, fix tests · 9fff631a
      Sean Griffin 提交于
      The changes in #18149 added tests for the app generator, but only fixed
      it for the plugin generator (I should have let CI finish though I think
      it would have failed as an allowed failure).
      9fff631a
    • S
      Merge pull request #18149 from arthurnn/byebug_on_mri · 569c6747
      Sean Griffin 提交于
      Only add debugger/byebug if on MRI
      569c6747
    • A
      Only add debugger/byebug if on MRI · 0bb73f03
      Arthur Neves 提交于
      0bb73f03
    • S
      Add `force: true` to table created in tests · 32f30d22
      Sean Griffin 提交于
      If the test is interrupted in a way that the teardown block fails to
      run, the tests will fail to run until the table is removed manually
      without this option.
      32f30d22
    • A
      Do not use line breaks on notes [ci skip] · 024edd36
      Andrey Nering 提交于
      References #18138
      024edd36
    • S
      Correctly handle limit on int4 and int8 types in PG · b0f2b94d
      Sean Griffin 提交于
      PG doesn't register it's types using the `int(4)` format that others do.
      As such, if we alias `int8` to the other integer types, the range
      information is lost. This is fixed by simply registering it separately.
      
      The other option (which I specifically chose to avoid) is to pass the
      information of the original type that was being aliased as an argument.
      I'd rather avoid that, since an alias should truly be treated the same.
      If we need different behavior for a different type, we should explicitly
      register it with that, and not have a conditional based on aliasing.
      
      Fixes #18144
      
      [Sean Griffin & ysbaddaden]
      b0f2b94d
    • Z
      Merge branch 'master' of github.com:rails/rails · 03698089
      Zachary Scott 提交于
      03698089
    • Z
      Remove this section, it adds no real value [ci skip] · 3cc9359c
      Zachary Scott 提交于
      3cc9359c
  2. 22 12月, 2014 16 次提交