Arelチェーンのブロックがあるかどうか、またはこのDRYを作成するためのより良い方法があるかどうかわからないため、、、、、およびメソッドを複製includes
しています。三項演算子で長い文字列を使用せずに、paramsでspecialty_idまたはfacility_idを簡単にテストできるものはありますか?where
order
paginate
where
class << self
def list(options = {})
facility_id = options[:facility_id] || nil
keywords = options[:keywords] || nil
page = options[:page] || nil
specialty_id = options[:specialty_id] || nil
jobs = self.arel_table
unless keywords.nil?
keywords = keywords.downcase.tr_s('^a-z0-9 ', '').tr_s(' ', '\%')
end
if !specialty_id.blank?
approved.
includes(:facility, :specialties, :videos).
where(jobs[:name].matches("%#{keywords}%")).
where(specialties: {id: specialty_id}).
order(jobs[:name]).
paginate(page: page, per_page: 20)
elsif !facility_id.blank?
approved.
includes(:facility, :specialties, :videos).
where(jobs[:name].matches("%#{keywords}%")).
where(facilities: {id: facility_id}).
order(jobs[:name]).
paginate(page: page, per_page: 20)
else
approved.
includes(:facility, :specialties, :videos).
where(jobs[:name].matches("%#{keywords}%")).
order(jobs[:name]).
paginate(page: page, per_page: 20)
end
end
end