提交 e20dc1b3 编写于 作者: S Sean Griffin

Merge pull request #19105 from amatsuda/array_take

Preserve Array#take(n) behaviour of HasManyAssociation
......@@ -129,11 +129,11 @@ def last(*args)
first_nth_or_last(:last, *args)
end
def take
def take(n = nil)
if loaded?
target.first
n ? target.take(n) : target.first
else
scope.take.tap do |record|
scope.take(n).tap do |record|
set_inverse_instance record if record.is_a? ActiveRecord::Base
end
end
......
......@@ -227,8 +227,8 @@ def last(*args)
@association.last(*args)
end
def take
@association.take
def take(n = nil)
@association.take(n)
end
# Returns a new object of the collection type that has been instantiated
......
......@@ -478,6 +478,19 @@ def test_taking_not_found
assert_raise(ActiveRecord::RecordNotFound) { authors(:bob).posts.take! }
end
def test_taking_with_a_number
# taking from unloaded Relation
bob = Author.find(authors(:bob).id)
assert_equal [posts(:misc_by_bob)], bob.posts.take(1)
bob = Author.find(authors(:bob).id)
assert_equal [posts(:misc_by_bob), posts(:other_by_bob)], bob.posts.take(2)
# taking from loaded Relation
bob.posts.to_a
assert_equal [posts(:misc_by_bob)], authors(:bob).posts.take(1)
assert_equal [posts(:misc_by_bob), posts(:other_by_bob)], authors(:bob).posts.take(2)
end
def test_taking_with_inverse_of
interests(:woodsmanship).destroy
interests(:survival).destroy
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册