1. 30 1月, 2014 2 次提交
    • G
      `scope` now raises on "dangerous" name conflicts · 7e8e91c4
      Godfrey Chan 提交于
      Similar to dangerous attribute methods, a scope name conflict is
      dangerous if it conflicts with an existing class method defined within
      `ActiveRecord::Base` but not its ancestors.
      
      See also #13389.
      
      *Godfrey Chan*, *Philippe Creux*
      7e8e91c4
    • G
      Fixed a bug in AR::Base#respond_to? · 9ed66648
      Godfrey Chan 提交于
      Before:
      
        >> ActiveRecord::Base.respond_to?(:find_by_something)
        NoMethodError: undefined method `abstract_class?' for Object:Class
      
      After:
      
        >> ActiveRecord::Base.respond_to?(:find_by_something)
        => false
      9ed66648
  2. 29 1月, 2014 2 次提交
  3. 28 1月, 2014 2 次提交
  4. 25 1月, 2014 1 次提交
  5. 24 1月, 2014 1 次提交
  6. 22 1月, 2014 4 次提交
    • K
      Calling reset on a collection association should unload the assocation · 43675f01
      Kelsey Schlarman 提交于
      Need to define #reset on CollectionProxy.
      43675f01
    • J
      Ensure AR #second, #third, etc. finders work through associations · 03855e79
      Jason Meller 提交于
      This commit fixes two regressions introduced in cafe31a0 where
      newly created finder methods #second, #third, #forth, and #fifth
      caused a NoMethodError error on reload associations and where we
      were pulling the wrong element out of cached associations.
      
      Examples:
      
        some_book.authors.reload.second
      
        # Before
        # => NoMethodError: undefined method 'first' for nil:NilClass
      
        # After
        # => #<Author id: 2, name: "Sally Second", ...>
      
        some_book.first.authors.first
        some_book.first.authors.second
      
        # Before
        # => #<Author id: 1, name: "Freddy First", ...>
        # => #<Author id: 1, name: "Freddy First", ...>
      
        # After
        # => #<Author id: 1, name: "Freddy First", ...>
        # => #<Author id: 2, name: "Sally Second", ...>
      
      Fixes #13783.
      03855e79
    • R
      `has_one` and `belongs_to` accessors don't add ORDER BY to the queries anymore. · b0a8ef14
      Rafael Mendonça França 提交于
      Since Rails 4.0, we add an ORDER BY in the `first` method to ensure consistent
      results among different database engines. But for singular associations this
      behavior is not needed since we will have one record to return. As this
      ORDER BY option can lead some performance issues we are removing it for singular
      associations accessors.
      
      Fixes #12623.
      b0a8ef14
    • Y
      prepend table name for `Relation#select` columns. · e011258c
      Yves Senn 提交于
      This fixes a bug where `select(:id)` combined with `joins()` raised:
      
      ```
      ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column name: id:
      SELECT  id, authors.author_address_id
      FROM "posts"
      INNER JOIN "authors"
      ON "authors"."id" = "posts"."author_id"
      ORDER BY posts.id LIMIT 3
      ```
      
      The `select_values` are still String and Symbols because other parts (mainly calculations.rb)
      rely on that fact.
      
      /cc @tenderlove
      e011258c
  7. 21 1月, 2014 4 次提交
  8. 19 1月, 2014 1 次提交
    • G
      Restore ActiveRecord states after a rollback for models w/o callbacks · 7386ffc7
      Godfrey Chan 提交于
      This fixes a regression (#13744) that was caused by 67d8bb96.
      
      In 67d8bb96, we introduced lazy rollback for records, such that the
      record's internal states and attributes are not restored immediately
      after a transaction rollback, but deferred until they are first
      accessed.
      
      This optimization is only performed when the model does not have any
      transactional callbacks (e.g. `after_commit` and `after_create`).
      
      Unfortunately, the models used to test the affected codepaths all
      comes with some sort of transactional callbacks. Therefore this
      codepath remains largely untested until now and as a result there are
      a few issues in the implementation that remains hidden until now.
      
      First, the `sync_with_transaction_state` (or more accurately,
      `update_attributes_from_transaction_state`) would perform the
      synchronization prematurely before a transaction is finalized (i.e.
      comitted or rolled back). As a result, when the actuall rollback
      happens, the record will incorrectly assumes that its internal states
      match the transaction state, and neglect to perform the restore.
      
      Second, `update_attributes_from_transaction_state` calls `committed!`
      in some cases. This in turns checks for the `destroyed?` state which
      also requires synchronization with the transaction stae, which causes
      an infnite recurrsion.
      
      This fix works by deferring the synchronization until the transaction
      has been finalized (addressing the first point), and also unrolled
      the `committed!` and `rolledback!` logic in-place (addressing the
      second point).
      
      It should be noted that the primary purpose of the `committed!` and
      `rolledback!` methods are to trigger the relevant transactional
      callbacks. Since this code path is only entered when there are no
      transactional callbacks on the model, this shouldn't be necessary. By
      unrolling the method calls, the intention here (to restore the states
      when necessary) becomes more clear.
      7386ffc7
  9. 18 1月, 2014 2 次提交
  10. 17 1月, 2014 7 次提交
  11. 16 1月, 2014 8 次提交
    • H
    • C
      Fix test for cache_key + touched · 38fcee38
      Carlos Antonio da Silva 提交于
      Ensure the child can actually be touched. The `Bulb` model has no
      timestamp column, thus trying to touch it would return `nil`.
      38fcee38
    • Y
      reset column information after fiddling with `Encoding.default_internal` · 6eab5304
      Yves Senn 提交于
      This solves order depndent problems in `base_test.rb`. The leaked column
      information crashed test cases using the `Weird` class later on:
      
      ```
        2) Error:
      BasicsTest#test_group_weirds_by_from:
      SyntaxError: /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:387: invalid hex escape
      ... attribute_before_type_cast("\x{A4CA}\x{A4DE}\x{A4A8}", *arg...
      ...                               ^
      /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:387: invalid hex escape
      ...te_before_type_cast("\x{A4CA}\x{A4DE}\x{A4A8}", *args)
      ...                               ^
      /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:387: invalid hex escape
      ...e_type_cast("\x{A4CA}\x{A4DE}\x{A4A8}", *args)
      ...                               ^
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:385:in `module_eval'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:385:in `define_proxy_call'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:294:in `block in define_attribute_method'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:285:in `each'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:285:in `define_attribute_method'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:252:in `block in define_attribute_methods'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:252:in `each'
          /Users/senny/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:252:in `define_attribute_methods'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_methods.rb:72:in `block in define_attribute_methods'
          /Users/senny/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/mutex_m.rb:73:in `synchronize'
          /Users/senny/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/mutex_m.rb:73:in `mu_synchronize'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_methods.rb:69:in `define_attribute_methods'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_methods.rb:174:in `method_missing'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_assignment.rb:45:in `public_send'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_assignment.rb:45:in `_assign_attribute'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_assignment.rb:32:in `block in assign_attributes'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_assignment.rb:26:in `each'
          /Users/senny/Projects/rails/activerecord/lib/active_record/attribute_assignment.rb:26:in `assign_attributes'
          /Users/senny/Projects/rails/activerecord/lib/active_record/core.rb:458:in `init_attributes'
          /Users/senny/Projects/rails/activerecord/lib/active_record/core.rb:191:in `initialize'
          /Users/senny/Projects/rails/activerecord/lib/active_record/inheritance.rb:30:in `new'
          /Users/senny/Projects/rails/activerecord/lib/active_record/inheritance.rb:30:in `new'
          /Users/senny/Projects/rails/activerecord/lib/active_record/persistence.rb:33:in `create'
          test/cases/base_test.rb:646:in `test_group_weirds_by_from'
      ```
      6eab5304
    • Y
      fca8b031
    • Y
      isolate class attribute assignment in `migration_test.rb` · a7139008
      Yves Senn 提交于
      This makes the tests inside `migration_test.rb` order independent.
      The assignments to `Reminder.table_name_prefix` and `Reminder.table_name_suffix`
      previously leaked and had impact on following test cases.
      
      This patch isolates the assignments on a throw-away subclass.
      a7139008
    • Y
      use `teardown` for cleanup, not `setup`. · f0052437
      Yves Senn 提交于
      This solves order dependent issues where the last test
      leaked the query cache state. This resulted in the following error:
      
      ```
      QueryCacheExpiryTest#test_cache_is_expired_by_habtm_delete [test/cases/query_cache_test.rb:275]:
      not all expectations were satisfied
      unsatisfied expectations:
      - expected exactly twice, invoked once: #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x7f93e0c65838>.clear_query_cache(any_parameters)
      ```
      f0052437
    • Y
      tests without transactional fixtures need to cleanup afterwards. · 8e1735e2
      Yves Senn 提交于
      This fixes test order issues.
      8e1735e2
    • Y
      no need to `return skip` in tests. `skip` is enough. · a6512cbd
      Yves Senn 提交于
      a6512cbd
  12. 15 1月, 2014 3 次提交
  13. 14 1月, 2014 3 次提交