From 5bd116ccf4e341b25dbba418b6c5f0ed3b0c5187 Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Tue, 13 Mar 2007 09:45:09 +0000 Subject: Make sure with_scope takes both :select and :joins into account when setting :readonly. Allows you to save records you retrieve using finders on a has_many :through associations. [Koz] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6413 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/base.rb | 2 +- activerecord/test/associations_test.rb | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index d576a2b443..0810300113 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Make sure with_scope takes both :select and :joins into account when setting :readonly. Allows you to save records you retrieve using method_missing on a has_many :through associations. [Koz] + * Allow a polymorphic :source for has_many :through associations. Closes #7143 [protocool] * Consistent public/protected/private visibility for chained methods. #7813 [Dan Manges] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index f3d4cf856a..03c0054bd0 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -938,7 +938,7 @@ module ActiveRecord #:nodoc: if f = method_scoping[:find] f.assert_valid_keys([ :conditions, :joins, :select, :include, :from, :offset, :limit, :order, :readonly, :lock ]) - f[:readonly] = true if !f[:joins].blank? && !f.has_key?(:readonly) + set_readonly_option! f end # Merge scopings diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb index db4e4118f4..250fa1027c 100755 --- a/activerecord/test/associations_test.rb +++ b/activerecord/test/associations_test.rb @@ -10,6 +10,8 @@ require 'fixtures/order' require 'fixtures/category' require 'fixtures/post' require 'fixtures/author' +require 'fixtures/tag' +require 'fixtures/tagging' class AssociationsTest < Test::Unit::TestCase @@ -1855,4 +1857,12 @@ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase projects = Project.send(:select_limited_ids_list, {:order => 'developers.created_at'}, join_dep) assert_equal %w(1 2), projects.scan(/\d/).sort end + + def test_scoped_find_on_through_association_doesnt_return_read_only_records + tag = Post.find(1).tags.find_by_name("General") + + assert_nothing_raised do + tag.save! + end + end end -- cgit v1.2.3