Skip to content
Browse files

Not need to pass join attributes to association build

  • Loading branch information...
1 parent 7cd4063 commit f18c0547b0a7ff97fec78cb1f0c95c2531290a94 @rafaelfranca rafaelfranca committed
View
4 activerecord/lib/active_record/associations/has_many_through_association.rb
@@ -73,7 +73,9 @@ def through_association
# association
def build_through_record(record)
@through_records[record.object_id] ||= begin
- through_record = through_association.build(construct_join_attributes(record))
+ ensure_mutable
+
+ through_record = through_association.build
through_record.send("#{source_reflection.name}=", record)
through_record
end
View
10 activerecord/lib/active_record/associations/through_association.rb
@@ -37,9 +37,7 @@ def target_scope
# situation it is more natural for the user to just create or modify their join records
# directly as required.
def construct_join_attributes(*records)
- if source_reflection.macro != :belongs_to
- raise HasManyThroughCantAssociateThroughHasOneOrManyReflection.new(owner, reflection)
- end
+ ensure_mutable
join_attributes = {
source_reflection.foreign_key =>
@@ -73,6 +71,12 @@ def foreign_key_present?
!owner[through_reflection.foreign_key].nil?
end
+ def ensure_mutable
+ if source_reflection.macro != :belongs_to
+ raise HasManyThroughCantAssociateThroughHasOneOrManyReflection.new(owner, reflection)
+ end
+ end
+
def ensure_not_nested
if reflection.nested?
raise HasManyThroughNestedAssociationsAreReadonly.new(owner, reflection)
View
5 activerecord/test/cases/associations/has_many_through_associations_test.rb
@@ -4,7 +4,6 @@
require 'models/reference'
require 'models/job'
require 'models/reader'
-require 'models/secure_reader'
require 'models/comment'
require 'models/tag'
require 'models/tagging'
@@ -60,7 +59,7 @@ def test_associate_existing
end
def test_associate_existing_with_strict_mass_assignment_sanitizer
- ActiveRecord::Base.mass_assignment_sanitizer = :strict
+ SecureReader.mass_assignment_sanitizer = :strict
SecureReader.new
@@ -71,7 +70,7 @@ def test_associate_existing_with_strict_mass_assignment_sanitizer
post.secure_people << person
end
ensure
- ActiveRecord::Base.mass_assignment_sanitizer = :logger
+ SecureReader.mass_assignment_sanitizer = :logger
end
def test_associate_existing_record_twice_should_add_to_target_twice
View
9 activerecord/test/models/reader.rb
@@ -3,3 +3,12 @@ class Reader < ActiveRecord::Base
belongs_to :person, :inverse_of => :readers
belongs_to :single_person, :class_name => 'Person', :foreign_key => :person_id, :inverse_of => :reader
end
+
+class SecureReader < ActiveRecord::Base
+ self.table_name = "readers"
+
+ belongs_to :secure_post, :class_name => "Post", :foreign_key => "post_id"
+ belongs_to :secure_person, :inverse_of => :secure_readers, :class_name => "Person", :foreign_key => "person_id"
+
+ attr_accessible nil
+end
View
9 activerecord/test/models/secure_reader.rb
@@ -1,9 +0,0 @@
-class SecureReader < ActiveRecord::Base
- self.table_name = "readers"
-
- belongs_to :secure_post, :class_name => "Post", :foreign_key => "post_id"
- belongs_to :secure_person, :inverse_of => :secure_readers, :class_name => "Person", :foreign_key => "person_id"
-
-
- attr_accessible nil
-end

0 comments on commit f18c054

Please sign in to comment.
Something went wrong with that request. Please try again.