def self.paged_search(query, custom_options = {})
options = {:per_page => 10}
options.update(custom_options)
query_str = []
query_prms = []
if options[:from]
query_str << "created_at > ?"
query_prms << options[:from]
end
if options[:locality]
query_str << "locality_id IN (?)"
query_prms << options[:locality].is_a?(Array) ? options[:locality] : Locality.find_with_children(options[:locality])
end
if options[:category]
query_str << "categories.id IN (?)"
query_prms << options[:category].is_a?(Array) ? options[:category] : Category.find_with_children(options[:category])
end
conditions = [query_str.join(" AND ")] + query_prms
search_options = {:conditions => conditions, :include => :categories, :page => options[:page], :per_page => options[:per_page]}
query.blank? ? Company.paginate(search_options) : Company.search(query, search_options )
end
Refactorings
No refactoring yet !
Adam
September 25, 2009, September 25, 2009 16:09, permalink
class Company < ActiveRecord::Base
named_scope :created_after, lambda { |date| { :conditions => [ 'created_at > ?', date ] } if date }
named_scope :in_locality, lambda { |location| { :conditions => [ 'locality_id IN (?)', location.is_a?(Array) ? location : Locality.find_with_children(location) ] } }
named_scope :with_category, lambda { |category| { :include => :categories, :conditions => [ 'categories.id IN ?', category.is_a?(Array) ? category : Category.find_with_children(category) ] } }
def self.paged_search(query, options = {})
options.reverse_merge!(:per_page => 10)
operator = created_after(options[:from]).
in_locality(options[:locality]).
with_category(options[:category])
if query.blank?
operator.paginate(:page => options[:page], :per_page => options[:per_page])
else
operator.search(query)
end
end
end
Hi, trying to implement one method that could search through model Company with fulltext, including categories (has_many through), localities and a date condition. Thanks for any advice ;)