Wrapper/helper for ActiveRecord find(:all, *args). Returns a collection of objects injected into a Hash.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
.gitignore
Gemfile
README
Rakefile
hash_all.gemspec
init.rb

README

Wrapper/helper for ActiveRecord <tt>find(:all, *args)</tt>. Returns a collection of 
objects injected into a Hash. The attribute used as a key for the Hash should be
specified as first argument. if :fetch is not specified in the arguments the whole
object will be assigned as value, otherwise only the attribute spefified.
You can pass in all the same arguments to this method as you can to <tt>find(:all)</tt>.

==== Example

Given the models:

Feed(id: integer, state: string, name: string)
Post(id: integer, feed_name: string, title: string, url: string)

count the number of posts of every state. Row count is too high to use SQL JOIN.

@post_per_state = {}
feeds  = Feed.hash_all('feed_name', :fetch => 'state')
posts  = Post.all(:select      => 'COUNT(id), feed_name',
                  :group       => 'feed_name')
posts.each do |p|
  @post_per_state[feeds[p.feed_name]] ||= 0
  @post_per_state[feeds[p.feed_name]] += p.attributes['COUNT(id)'].to_i
end

=> {"new york"=>6, "georgia"=>11, "new mexico"=>2, ... }