提交 f2a0dfc2 编写于 作者: J Jeremy Friesen

Addresses an inconsistency in the ActiveRecord::Base.method_missing handling...

Addresses an inconsistency in the ActiveRecord::Base.method_missing handling of dynamic finder methods and the passing of the &block parameter for :find_by_attributes.
上级 ae323a51
......@@ -1052,7 +1052,7 @@ def method_missing(method_id, *arguments, &block)
if match.finder?
options = arguments.extract_options!
relation = options.any? ? scoped(options) : scoped
relation.send :find_by_attributes, match, attribute_names, *arguments
relation.send :find_by_attributes, match, attribute_names, *arguments, &block
elsif match.instantiator?
scoped.send :find_or_instantiator_by_attributes, match, attribute_names, *arguments, &block
end
......
......@@ -259,6 +259,7 @@ def find_by_attributes(match, attributes, *args)
if match.bang? && result.blank?
raise RecordNotFound, "Couldn't find #{@klass.name} with #{conditions.to_a.collect {|p| p.join(' = ')}.join(', ')}"
else
yield(result) if block_given?
result
end
end
......
......@@ -372,6 +372,15 @@ def test_loading_with_one_association_with_non_preload
assert_equal Post.find(1).last_comment, post.last_comment
end
def test_dynamic_find_by_attributes_should_yield_found_object
david = authors(:david)
yielded_value = nil
Author.find_by_name(david.name) do |author|
yielded_value = author
end
assert_equal david, yielded_value
end
def test_dynamic_find_by_attributes
david = authors(:david)
author = Author.preload(:taggings).find_by_id(david.id)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册