aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/has_many_through_association.rb
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2010-10-15 17:46:09 +0100
committerJon Leighton <j@jonathanleighton.com>2010-10-15 17:46:09 +0100
commitedc176d33be9499f4c096779c5b4711b5daf0c06 (patch)
treec775c7643fca33a3ff18aaa724064e2a167c8616 /activerecord/lib/active_record/associations/has_many_through_association.rb
parentd619e399380cd840f9f5ec88bb3d823fbb1f4d08 (diff)
downloadrails-edc176d33be9499f4c096779c5b4711b5daf0c06.tar.gz
rails-edc176d33be9499f4c096779c5b4711b5daf0c06.tar.bz2
rails-edc176d33be9499f4c096779c5b4711b5daf0c06.zip
Make sure nested through associations are read only
Diffstat (limited to 'activerecord/lib/active_record/associations/has_many_through_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/has_many_through_association.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb
index 313d9da621..f0ad166802 100644
--- a/activerecord/lib/active_record/associations/has_many_through_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_through_association.rb
@@ -8,6 +8,11 @@ module ActiveRecord
class HasManyThroughAssociation < HasManyAssociation #:nodoc:
include ThroughAssociationScope
+ def build(attributes = {}, &block)
+ ensure_not_nested
+ super
+ end
+
alias_method :new, :build
def create!(attrs = nil)
@@ -37,6 +42,7 @@ module ActiveRecord
protected
def create_record(attrs, force = true)
+ ensure_not_nested
ensure_owner_is_not_new
transaction do
@@ -60,6 +66,8 @@ module ActiveRecord
end
def insert_record(record, force = true, validate = true)
+ ensure_not_nested
+
if record.new_record?
if force
record.save!
@@ -75,6 +83,8 @@ module ActiveRecord
# TODO - add dependent option support
def delete_records(records)
+ ensure_not_nested
+
klass = @reflection.through_reflection.klass
records.each do |associate|
klass.delete_all(construct_join_attributes(associate))