Skip to content

Commit

Permalink
Merge pull request #19105 from amatsuda/array_take
Browse files Browse the repository at this point in the history
Preserve Array#take(n) behaviour of HasManyAssociation
  • Loading branch information
sgrif committed Mar 2, 2015
2 parents c0584ea + 243cb81 commit e20dc1b
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
Expand Up @@ -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
Expand Down
Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions activerecord/test/cases/associations/has_many_associations_test.rb
Expand Up @@ -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
Expand Down

0 comments on commit e20dc1b

Please sign in to comment.