Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

ActiveRecord::Relation#scope_for_create wrongly merges other table's conditions having same attribute name

#5234

When a relation being merged with another relation based on other model, its scope_for_create are wrongly overwritten.

For example, a Pirate's name are overwritten by his Ship's name in the following code.

> (Pirate.where(:name => 'Monkey D. Luffy').joins(:ship) & Ship.where(:name => 'Going Merry')).scope_for_create
 #=> {:name=>"Going Merry"}

Attached a patch for fixing this.
This patch depends on another patch for #5184 ActiveRecord::Relation#merge merges other table's conditions having same attr... , so please apply both two patches, or the tests won't pass.

Reported by Akira Matsuda · July 28th, 2010 @ 09:41 PM

State: resolved
Milestone: 3.0.2
Assigned to: Aaron Patterson Aaron Patterson
Importance: Low

Activity

  1. Akira Matsuda
  2. José Valim
    José Valim
    • Milestone cleared.
    • Assigned user set to Aaron Patterson
    • Importance changed from to Low

    August 23rd, 2010 @ 01:25 AM

  3. Aaron Patterson
    Aaron Patterson
    • State changed from new to incomplete

    Hey Akira, I tried applying this patch, but the test you provide fails. Can you check the patch?

    $ ruby -w -I"lib:test:test/connections/native_sqlite3" test/cases/method_scoping_test.rb -n test_scoped_create_with_join_and_merge
    /Users/apatterson/git/arel/lib/arel/algebra/attributes/attribute.rb:70: warning: method redefined; discarding old root
    Using native SQLite3
    Loaded suite test/cases/method_scoping_test
    Started
    F
    Finished in 0.023906 seconds.
    
      1) Failure:
    test_scoped_create_with_join_and_merge(MethodScopingTest)
        [test/cases/method_scoping_test.rb:231:in `test_scoped_create_with_join_and_merge'
         /Users/apatterson/git/rails/activerecord/lib/active_record/base.rb:1123:in `with_scope'
         /Users/apatterson/git/rails/activerecord/lib/active_record/relation.rb:360:in `send'
         /Users/apatterson/git/rails/activerecord/lib/active_record/relation.rb:360:in `method_missing'
         /Users/apatterson/git/rails/activerecord/lib/active_record/relation.rb:120:in `scoping'
         /Users/apatterson/git/rails/activerecord/lib/active_record/relation.rb:360:in `method_missing'
         test/cases/method_scoping_test.rb:230:in `test_scoped_create_with_join_and_merge'
         /Users/apatterson/git/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `__send__'
         /Users/apatterson/git/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:67:in `run'
         /Users/apatterson/git/rails/activesupport/lib/active_support/callbacks.rb:418:in `_run_setup_callbacks'
         /Users/apatterson/git/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb:65:in `run']:
    <{:body=>"but Who's Buying?"}> expected but was
    <{}>.
    
    1 tests, 1 assertions, 1 failures, 0 errors
    

    August 23rd, 2010 @ 01:40 AM

  4. Jeremy Kemper
  5. Jeremy Kemper
  6. Ryan Bigg
    Ryan Bigg
    • Tag cleared.

    Automatic cleanup of spam.

    October 16th, 2010 @ 02:42 AM

  7. Repository
  8. Repository