Т.е. составить типичные вещи в нем просто, а вот, к примеру, мне нужно сделать отбор по вычисляемому полю, например, цене, которая складывается из цены за юнит умноженной на количество юнитов. Пока ны наю как это сделать.
Вторая неприятность - все передаваемые в запрос значения переменных должны храниться в ЛОКАЛЬНЫХ переменных, а в @переменных это дело работать не будет, а жаль.
А вот и пример моего "дикого запроса".
  def index
       session[:search]=params[:search] if params[:search]      search_params=SearchFilterParams.new(session[:search])
  
    @conditions=Caboose::EZ::Condition.new :lots  do
      region_id==search_params.region_id if search_params.region_id>0
      square<=>(Square.find_by_id(search_params.square.to_s).min_square.to_s .. Square.find_by_id(search_params.square.to_s).max_square.to_s)  if search_params.square>0
      price_per_square<Price.find_by_id(search_params.price_per_square).max_price.to_s if search_params.price_per_square>0
#      full_price<FullPrice.find_by_id(search_params.full_price).max_price.to_s if search_params.full_price>0
      distance_to_city<CityDistance.find_by_id(search_params.distance_to_city).max_distance.to_s if search_params.distance_to_city>0
      placement_id==search_params.placement if search_params.placement>0
   end
## ай-яй-яй, некрасиво   
    @search=search_params
## должен прийти хеш    
## если заданы фильтры    
# order by region_id,square, price_per_square*square, distance
     sort_init 'price_per_square'
     sort_update 
    @lot_pages, @lots=paginate(:lots,
      :include=>['region', 'gas','electricity','water', 'lotroad_distance','departure'],
      :order=>sort_clause,
      :conditions=>@conditions.to_sql,
      :per_page=>3
    )
  end class SearchFilterParams
   attr :region_id
   attr :square
   attr :price_per_square
   attr :full_price
   attr :distance_to_city
   attr :placement
   def initialize(lparams={})
     @region_id=lparams[:region_id].to_i
     @square=lparams[:square].to_i
     @price_per_square=lparams[:price_per_square].to_i
     @full_price=lparams[:full_price].to_i
     @distance_to_city=lparams[:distance_to_city].to_i
     @placement=lparams[:placement].to_i
   end
 end   
Оставить комментарий