Why does this assignment and each loop return just 1 attribute and not the entire object I expect? <p>I have a method on my <code>Node</code> model that looks like this:</p> <pre><code> def users_tagged @node = self @tags = @node.user_tag_list @users = @tags.each do |tag| User.find_by email: tag end end </code></pre> <p>What I would like to happen is for the <code>@users</code> object to be a collection of <code>User</code> records, but it simply returns a list of email addresses.</p> <p>This is what this <code>Node</code> object looks like:</p> <pre><code>&gt; n =&gt; #&lt;Node id: 6, name: "10PP Form Video", family_tree_id: 57, user_id: 57, media_id: 118, media_type: "Video", created_at: "2015-03-09 20:57:19", updated_at: "2015-03-09 20:57:19", circa: nil, is_comment: nil&gt; &gt; n.user_tags =&gt; [#&lt;ActsAsTaggableOn::Tag id: 4, name: "gerry@test.com", taggings_count: 1&gt;, #&lt;ActsAsTaggableOn::Tag id: 3, name: "abc@test.com", taggings_count: 1&gt;] [135] pry(main)&gt; n.user_tag_list =&gt; ["gerry@test.com", "abc@test.com"] </code></pre> <p>But when I try to execute that method, this is what I get:</p> <pre><code>&gt; n.users_tagged ActsAsTaggableOn::Tag Load (0.5ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'user_tags' AND taggings.tagger_id IS NULL) [["taggable_id", 6], ["taggable_type", "Node"]] User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'gerry@test.com' LIMIT 1 User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'abc@test.com' LIMIT 1 =&gt; ["gerry@test.com", "abc@test.com"] </code></pre> <p>Why does it not return the entire record?</p>