1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Add :readonly option to HasManyThrough associations. Closes #11156 [miloops]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8989 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Pratik Naik 2008-03-07 11:45:07 +00:00
parent 8a351648ab
commit e117350037
4 changed files with 13 additions and 2 deletions

View file

@ -1,5 +1,7 @@
*SVN* *SVN*
* Add :readonly option to HasManyThrough associations. #11156 [miloops]
* Improve performance on :include/:conditions/:limit queries by selectively joining in the pre-query. #9560 [dasil003] * Improve performance on :include/:conditions/:limit queries by selectively joining in the pre-query. #9560 [dasil003]
* Perf fix: Avoid the use of named block arguments. Closes #11109 [adymo] * Perf fix: Avoid the use of named block arguments. Closes #11109 [adymo]

View file

@ -159,6 +159,7 @@ module ActiveRecord
:order => @reflection.options[:order], :order => @reflection.options[:order],
:limit => @reflection.options[:limit], :limit => @reflection.options[:limit],
:group => @reflection.options[:group], :group => @reflection.options[:group],
:readonly => @reflection.options[:readonly],
:include => @reflection.options[:include] || @reflection.source_reflection.options[:include] :include => @reflection.options[:include] || @reflection.source_reflection.options[:include]
) )
@ -253,7 +254,9 @@ module ActiveRecord
:include => @reflection.options[:include], :include => @reflection.options[:include],
:select => construct_select, :select => construct_select,
:order => @reflection.options[:order], :order => @reflection.options[:order],
:limit => @reflection.options[:limit] } } :limit => @reflection.options[:limit],
:readonly => @reflection.options[:readonly],
} }
end end
def construct_sql def construct_sql

View file

@ -554,6 +554,11 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
companies(:first_firm).readonly_clients.find(:all).each { |c| assert c.readonly? } companies(:first_firm).readonly_clients.find(:all).each { |c| assert c.readonly? }
end end
def test_cant_save_has_many_readonly_association
authors(:david).readonly_comments.each { |c| assert_raise(ActiveRecord::ReadOnlyRecord) { c.save! } }
authors(:david).readonly_comments.each { |c| assert c.readonly? }
end
def test_triple_equality def test_triple_equality
assert !(Array === Firm.find(:first).clients) assert !(Array === Firm.find(:first).clients)
assert Firm.find(:first).clients === Array assert Firm.find(:first).clients === Array

View file

@ -20,6 +20,7 @@ class Author < ActiveRecord::Base
has_many :funky_comments, :through => :posts, :source => :comments has_many :funky_comments, :through => :posts, :source => :comments
has_many :ordered_uniq_comments, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id' has_many :ordered_uniq_comments, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id'
has_many :ordered_uniq_comments_desc, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id DESC' has_many :ordered_uniq_comments_desc, :through => :posts, :source => :comments, :uniq => true, :order => 'comments.id DESC'
has_many :readonly_comments, :through => :posts, :source => :comments, :readonly => true
has_many :special_posts has_many :special_posts
has_many :special_post_comments, :through => :special_posts, :source => :comments has_many :special_post_comments, :through => :special_posts, :source => :comments