aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2009-12-28 14:20:54 +0530
committerPratik Naik <pratiknaik@gmail.com>2009-12-28 14:20:54 +0530
commit92c982d973c3e3125982309ff8bb6c22608696c5 (patch)
treeb26e384888d4284550f26420f22640fb616639f1
parent9f4e98330b3a7f85a4bca91fca062106ffbee2bf (diff)
downloadrails-92c982d973c3e3125982309ff8bb6c22608696c5.tar.gz
rails-92c982d973c3e3125982309ff8bb6c22608696c5.tar.bz2
rails-92c982d973c3e3125982309ff8bb6c22608696c5.zip
Relation#readonly(false) should toggle the readonly flag
-rw-r--r--activerecord/lib/active_record/relation.rb13
-rw-r--r--activerecord/test/cases/associations/inner_join_association_test.rb2
2 files changed, 10 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index a7f62abe1d..ff10df96f2 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -35,12 +35,17 @@ module ActiveRecord
create_new_relation(@relation, @readonly, @associations_to_preload, @eager_load_associations + Array.wrap(associations))
end
- def readonly
- create_new_relation(@relation, true)
+ def readonly(status = true)
+ status.nil? ? create_new_relation : create_new_relation(@relation, status)
end
def select(selects)
- selects.present? ? create_new_relation(@relation.project(selects)) : create_new_relation
+ if selects.present?
+ frozen = @relation.joins(relation).present? ? false : @readonly
+ create_new_relation(@relation.project(selects), frozen)
+ else
+ create_new_relation
+ end
end
def from(from)
@@ -106,7 +111,7 @@ module ActiveRecord
@relation.join(join, join_type)
end
- create_new_relation(join_relation)
+ create_new_relation(join_relation, true)
end
def where(*args)
diff --git a/activerecord/test/cases/associations/inner_join_association_test.rb b/activerecord/test/cases/associations/inner_join_association_test.rb
index 6220fab383..18a1cd3cd0 100644
--- a/activerecord/test/cases/associations/inner_join_association_test.rb
+++ b/activerecord/test/cases/associations/inner_join_association_test.rb
@@ -64,7 +64,7 @@ class InnerJoinAssociationTest < ActiveRecord::TestCase
end
def test_find_with_implicit_inner_joins_honors_readonly_false
- authors = Author.find(:all, :joins => :posts, :readonly => false)
+ authors = Author.joins(:posts).readonly(false).to_a
assert !authors.empty?, "expected authors to be non-empty"
assert authors.all? {|a| !a.readonly? }, "expected no authors to be readonly"
end