Onze dagmethode #6: AR.find(..).each

Geplaatst door Remco van 't Veer di, 12 feb 2008 08:00:00 GMT

AR.find(..).each

Wat me vaak dwars zit als ik met ActiveRecord in de weer ben is dat ik na een find-all ook nog eens each moet schrijven. Sterker nog als ik each vergeet en er een block aanplak gebeurd daar helemaal niets mee, ook geen foutmelding of iets dergelijks.

Vandaag dus geen methode maar een methode minder!


class ActiveRecord::Base
  def self.find_with_block_sensitivity(*args)
    r = find_without_block_sensitivity(*args)
    [r].flatten.each {|v| yield v} if block_given?
    r
  end

  class << self
    alias_method :find_without_block_sensitivity, :find
    alias_method :find, :find_with_block_sensitivity
  end
end

Hiermee kunnen we ipv:


Article.find(:all).each {|article| puts article.title}

het volgende schrijven:


Article.find(:all) {|article| puts article.title}

Kijk mij! Zonder each! Werkt voor zowel enkele als meervoudige resultaten.

Geplaatst in , ,  | 2 reacties

Reacties

  1. Michiel zei 13 minuten later:
    Als er een block meegegeven wordt, kun je ook standaard voor de map-functie kiezen:
    
    def self.find_with_block_sensitivity(*args)
      r = find_without_block_sensitivity(*args)
      block_given? ? [r].flatten.map {|v| yield v} : r
    end
    
    puts Article.find(:all, &:title)
    
  2. RemVee zei ongeveer 1 uur later:

    Prachtig!

(Laat url/e-mail achter »)

   Voorvertoning