2012-10-18 25 views
1

我現在在控制器搜索邏輯:移動搜索邏輯控制器與模擬

def index 
    @title = "All cars" 
    #show manufacturers only with cars 
    @manufacturers = Manufacturer.select('*') 
    @manufacturers = @manufacturers.where('count_cars > ?', 0) 

    @cars = Car.select('*') 
    #manufacturer 
    @cars = @cars.where('manufacturer_id = ?', params[:filter_manufacturer]) if not params[:filter_manufacturer].blank? 
    #model 
    @models = Model.select('*') 
    @models = @models.where('manufacturer_id = ?', params[:filter_manufacturer]) if not params[:filter_manufacturer].blank? and not params[:filter_model].blank? 
    @models = @models.where('count_cars > ?', 0) 

    @cars = @cars.where('model_id = ?', params[:filter_model]) if not params[:filter_model].blank? 
    #years 
    @cars = @cars.where('year >= ?', params[:filter_year_from]) if not params[:filter_year_from].blank? 
    @cars = @cars.where('year <= ?', params[:filter_year_to]) if not params[:filter_year_to].blank? 
    #district 
    @cars = @cars.where('district_id = ?', params[:filter_district]) if not params[:filter_district].blank? 
    #body type 
    @cars = @cars.where('car_body_type_id = ?', params[:filter_body_type]) if not params[:filter_body_type].blank? 
    #fuel 
    @cars = @cars.where('car_fuel_id = ?', params[:filter_fuel]) if not params[:filter_fuel].blank? 
    #transmission 
    @cars = @cars.where('car_transmission_id = ?', params[:filter_transmission]) if not params[:filter_transmission].blank? 
    #wheel drive 
    @cars = @cars.where('car_drive_wheel_id = ?', params[:filter_drive_wheel]) if not params[:filter_drive_wheel].blank? 
    #doors 
    @cars = @cars.where('doors = ?', params[:filter_doors]) if not params[:filter_doors].blank? 
    #without damage 
    @cars = @cars.where('damage = ?', false) if params[:filter_damage] 
    #with customs 
    @cars = @cars.where('customs = ?', true) if params[:filter_customs] 
    #not crashed 
    @cars = @cars.where('crash = ?', false) if params[:filter_crash] 
    #price 
    @cars = @cars.where('price >= ?', params[:filter_price_from]) if not params[:filter_price_from].blank? 
    @cars = @cars.where('price <= ?', params[:filter_price_to]) if not params[:filter_price_to].blank? 

    @cars = @cars.paginate(:page => params[:page], :per_page => 20) 
end 

我是不是要動這個邏輯模型?如果是的話,請幫我加上標記。

+0

您可以在模型下寫一個範圍,合併一行內的所有行。示例爲您的製造商型號, 示波器製造商,lambda {select(「*」)。其中('count_cars>?',0)} – Mohanraj

回答

1

是的,您可以將此邏輯移至模型。

您需要添加範圍爲

@manufacturers = @manufacturers.where('count_cars > ?', 0) 

即轉換爲範圍,想

scope :count_car, where("count_cars > ?", 0) 

那麼之後你可以調用作爲

@manufacturers = @manufacturers.count_car 

一樣創造別人範圍爲

你也可以在你的模型中定義的方法,例如

@cars = @cars.where('manufacturer_id = ?', params[:filter_manufacturer]) if not params[:filter_manufacturer].blank? 

進行轉換的

def cars(manufacture_id=nil) 
    where('manufacturer_id = ?',manufacture_id) if manufacture_id.present? 
end 

,你可以調用此方法相同範圍

0

在控制器

@cars = Car.search(params) 

在汽車模型

def self.search(params) 
    cars = Car.select('*') 
    cars = cars.where('manufacturer_id = ?', params[:filter_manufacturer]) if not params[:filter_manufacturer].blank? 
    cars = cars.where('model_id = ?', params[:filter_model]) if not params[:filter_model].blank? 
    #years 
    cars = cars.where('year >= ?', params[:filter_year_from]) if not params[:filter_year_from].blank? 
    cars = cars.where('year <= ?', params[:filter_year_to]) if not params[:filter_year_to].blank? 
    #district 
    cars = cars.where('district_id = ?', params[:filter_district]) if not params[:filter_district].blank? 
    #body type 
    cars = cars.where('car_body_type_id = ?', params[:filter_body_type]) if not params[:filter_body_type].blank? 
    #fuel 
    cars = cars.where('car_fuel_id = ?', params[:filter_fuel]) if not params[:filter_fuel].blank? 
    #transmission 
    cars = cars.where('car_transmission_id = ?', params[:filter_transmission]) if not params[:filter_transmission].blank? 
    #wheel drive 
    cars = cars.where('car_drive_wheel_id = ?', params[:filter_drive_wheel]) if not params[:filter_drive_wheel].blank? 
    #doors 
    cars = cars.where('doors = ?', params[:filter_doors]) if not params[:filter_doors].blank? 
    #without damage 
    cars = cars.where('damage = ?', false) if params[:filter_damage] 
    #with customs 
    cars = cars.where('customs = ?', true) if params[:filter_customs] 
    #not crashed 
    cars = cars.where('crash = ?', false) if params[:filter_crash] 
    #price 
    cars = cars.where('price >= ?', params[:filter_price_from]) if not params[:filter_price_from].blank? 
    cars = cars.where('price <= ?', params[:filter_price_to]) if not params[:filter_price_to].blank? 
    cars 
end