class RuboCop::Cop::Rails::Pluck
This cop enforces the use of `pluck` over `map`.
`pluck` can be used instead of `map` to extract a single key from each element in an enumerable. When called on an Active Record relation, it results in a more efficient query that only selects the necessary key.
@example
# bad Post.published.map { |post| post[:title] } [{ a: :b, c: :d }].collect { |el| el[:a] } # good Post.published.pluck(:title) [{ a: :b, c: :d }].pluck(:a)
Constants
- MSG
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/rails/pluck.rb, line 32 def on_block(node) pluck_candidate?(node) do |method, argument, element, value| next unless argument == element message = message(method, argument, element, value) add_offense(offense_range(node), message: message) do |corrector| corrector.replace(offense_range(node), "pluck(:#{value})") end end end
Private Instance Methods
message(method, argument, element, value)
click to toggle source
# File lib/rubocop/cop/rails/pluck.rb, line 50 def message(method, argument, element, value) format(MSG, method: method, argument: argument, element: element, value: value) end
offense_range(node)
click to toggle source
# File lib/rubocop/cop/rails/pluck.rb, line 46 def offense_range(node) node.send_node.loc.selector.join(node.loc.end) end