Я рекомендую создать область в вашей модели, чтобы позаботиться о первой части вашего запроса, которая всегда одинакова в этом действии:
class Package < ActiveRecord::Base
named_scope :late_deliveries, :conditions => "actual_delivery IS NOT NULL AND actual_delivery > scheduled_delivery"
end
Теперь вы можете реорганизовать свои действия следующим образом:
def index
conditions = {}
[:status, :carrer].each{|param| conditions[param] = params[param] if params[param]}
@packages = Package.late_deliveries.find(:conditions => conditions)
end
Если: carrier и: status являются единственными двумя параметрами этого действия, то это еще проще:
def index
@packages = Package.late_deliveries.find(:conditions => params)
end
Надеюсь, это поможет!