提交 0f5104d7 编写于 作者: B Brian Samson

load has_many associations keyed off a custom primary key if that key is...

load has_many associations keyed off a custom primary key if that key is present but the record is unsaved
上级 0cd3bf84
...@@ -235,7 +235,7 @@ def destroy(*records) ...@@ -235,7 +235,7 @@ def destroy(*records)
# This method is abstract in the sense that it relies on # This method is abstract in the sense that it relies on
# +count_records+, which is a method descendants have to provide. # +count_records+, which is a method descendants have to provide.
def size def size
if owner.new_record? || (loaded? && !options[:uniq]) if !find_target? || (loaded? && !options[:uniq])
target.size target.size
elsif !loaded? && options[:group] elsif !loaded? && options[:group]
load_target.size load_target.size
......
...@@ -103,6 +103,10 @@ def delete_records(records, method) ...@@ -103,6 +103,10 @@ def delete_records(records, method)
end end
end end
end end
def foreign_key_present?
owner.attribute_present?(reflection.association_primary_key)
end
end end
end end
end end
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
require 'models/category' require 'models/category'
require 'models/post' require 'models/post'
require 'models/author' require 'models/author'
require 'models/essay'
require 'models/comment' require 'models/comment'
require 'models/person' require 'models/person'
require 'models/reader' require 'models/reader'
...@@ -61,7 +62,7 @@ def test_should_count_distinct_results ...@@ -61,7 +62,7 @@ def test_should_count_distinct_results
class HasManyAssociationsTest < ActiveRecord::TestCase class HasManyAssociationsTest < ActiveRecord::TestCase
fixtures :accounts, :categories, :companies, :developers, :projects, fixtures :accounts, :categories, :companies, :developers, :projects,
:developers_projects, :topics, :authors, :comments, :developers_projects, :topics, :authors, :comments,
:people, :posts, :readers, :taggings, :cars :people, :posts, :readers, :taggings, :cars, :essays
def setup def setup
Client.destroyed_client_ids.clear Client.destroyed_client_ids.clear
...@@ -1390,6 +1391,32 @@ def test_calling_first_or_last_on_new_record_should_not_run_queries ...@@ -1390,6 +1391,32 @@ def test_calling_first_or_last_on_new_record_should_not_run_queries
firm.clients.last firm.clients.last
end end
end end
def test_custom_primary_key_on_new_record_should_fetch_with_query
author = Author.new(:name => "David")
assert !author.essays.loaded?
assert_queries 1 do
assert_equal 1, author.essays.size
end
assert_equal author.essays, Essay.find_all_by_writer_id("David")
end
def test_has_many_custom_primary_key
david = authors(:david)
assert_equal david.essays, Essay.find_all_by_writer_id("David")
end
def test_blank_custom_primary_key_on_new_record_should_not_run_queries
author = Author.new
assert !author.essays.loaded?
assert_queries 0 do
assert_equal 0, author.essays.size
end
end
def test_calling_first_or_last_with_find_options_on_loaded_association_should_fetch_with_query def test_calling_first_or_last_with_find_options_on_loaded_association_should_fetch_with_query
firm = companies(:first_firm) firm = companies(:first_firm)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册