diff options
author | Yves Senn <yves.senn@gmail.com> | 2013-09-05 00:56:03 -0700 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2013-09-05 00:56:03 -0700 |
commit | 390aa7a0751ef00ff17e429587ca20833acf051d (patch) | |
tree | fcbc7b2cd3aae8055cd7d85906352609aa5a6a4b /guides | |
parent | 78befcfc287eae6dbfbd6287329b1cbcd9d77e3c (diff) | |
parent | 956a27ccd6aa119a5a64aa5714fc629c9d3317eb (diff) | |
download | rails-390aa7a0751ef00ff17e429587ca20833acf051d.tar.gz rails-390aa7a0751ef00ff17e429587ca20833acf051d.tar.bz2 rails-390aa7a0751ef00ff17e429587ca20833acf051d.zip |
Merge pull request #12130 from egilburg/patch-1
Document a difference between pluck and select [ci skip]
Diffstat (limited to 'guides')
-rw-r--r-- | guides/source/active_record_querying.md | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/guides/source/active_record_querying.md b/guides/source/active_record_querying.md index ba0dc6d9eb..5aa935a155 100644 --- a/guides/source/active_record_querying.md +++ b/guides/source/active_record_querying.md @@ -1466,7 +1466,7 @@ Client.pluck(:id, :name) # => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] ``` -`pluck` makes it possible to replace code like +`pluck` makes it possible to replace code like: ```ruby Client.select(:id).map { |c| c.id } @@ -1476,7 +1476,7 @@ Client.select(:id).map(&:id) Client.select(:id, :name).map { |c| [c.id, c.name] } ``` -with +with: ```ruby Client.pluck(:id) @@ -1484,6 +1484,37 @@ Client.pluck(:id) Client.pluck(:id, :name) ``` +Unlike `select`, `pluck` directly converts a database result into a Ruby `Array`, +without constructing `ActiveRecord` objects. This can mean better performance for +a large or often-running query. However, any model method overrides will +not be available. For example: + +```ruby +class Client < ActiveRecord::Base + def name + "I am #{super}" + end +end + +Client.select(:name).map &:name +# => ["I am David", "I am Jeremy", "I am Jose"] + +Client.pluck(:name) +# => ["David", "Jeremy", "Jose"] +``` + +Furthermore, unlike `select` and other `Relation` scopes, `pluck` triggers an immediate +query, and thus cannot be chained with any further scopes, although it can work with +scopes already constructed earlier: + +```ruby +Client.pluck(:name).limit(1) +# => NoMethodError: undefined method `limit' for #<Array:0x007ff34d3ad6d8> + +Client.limit(1).pluck(:name) +# => ["David"] +``` + ### `ids` `ids` can be used to pluck all the IDs for the relation using the table's primary key. |