Resolve association class correctly when assigning ids on a through association

This commit is contained in:
Matthew Draper 2016-12-09 09:29:54 +10:30
parent 0951306ca5
commit 847e9dd5c1
3 changed files with 12 additions and 1 deletions

View File

@ -75,7 +75,7 @@ module ActiveRecord
r.send(reflection.association_primary_key)
end.values_at(*ids).compact
if records.size != ids.size
scope.raise_record_not_found_exception!(ids, records.size, ids.size, reflection.association_primary_key)
klass.all.raise_record_not_found_exception!(ids, records.size, ids.size, reflection.association_primary_key)
else
replace(records)
end

View File

@ -850,6 +850,10 @@ module ActiveRecord
actual_source_reflection.options[:primary_key] || primary_key(klass || self.klass)
end
def association_primary_key_type
klass.type_for_attribute(association_primary_key)
end
# Gets an array of possible <tt>:through</tt> source reflection names in both singular and plural form.
#
# class Post < ActiveRecord::Base

View File

@ -904,6 +904,13 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
assert_match(/Couldn't find all Clients with 'name'/, e.message)
end
def test_collection_singular_ids_through_setter_raises_exception_when_invalid_ids_set
author = authors(:david)
ids = [categories(:general).name, "Unknown"]
e = assert_raises(ActiveRecord::RecordNotFound) { author.essay_category_ids = ids }
assert_equal "Couldn't find all Categories with 'name': (General, Unknown) (found 1 results, but was looking for 2)", e.message
end
def test_build_a_model_from_hm_through_association_with_where_clause
assert_nothing_raised { books(:awdr).subscribers.where(nick: "marklazz").build }
end