metautonomo.us

Confounding URL typists since 2007.

MetaSearch::Builder#relation and you

Posted by Ernie on September 20, 2010 at 3:46 pm

A recurring question I have been seeing regarding MetaSearch has been the need to modify or access the relation generated by the search. That’s precisely why MetaSearch::Builder#relation exists, so I thought I’d make a quick post detailing its usage.

While MetaSearch::Builder is doing its thing, handling your search params, it’s building up an ActiveRecord::Relation that will eventually be used for your results. So, in your controller, you might have:

 = Article.search(params[:search])
 = .all

You can instead be sure to lazy load those articles in your view by instead doing:

 = Article.search(params[:search])
 = .relation

You can also do some fun little tricks with scopes, if you’re so inclined:

# article.rb
class Article < ActiveRecord::Base
  scope :with_titles_containing_hi, search(:title_contains => 'hi').relation
  scope :with_titles_containing_there, search(:title_contains => 'there').relation
end
 
ruby-1.9.2-p0 > Article.with_titles_containing_hi.
                with_titles_containing_there.to_sql
=> "SELECT     \"articles\".* FROM       \"articles\"
    WHERE     (\"articles\".\"title\" LIKE '%hi%')
    AND (\"articles\".\"title\" LIKE '%there%')"

I tend to prefer using MetaWhere for things like that but it’s a neat trick, all the same.

So, there you have it: MetaSearch::Builder#relation. Use it wisely.

Filed under Blog
Tagged as , ,
You can leave a comment, or trackback from your own site.