我複製了我的includes
,where
,order
和paginate
方法,因爲我不知道是否存在Arel鏈的塊或更好的方式來製作此DRY。有沒有什麼東西可以很容易地在params中測試specialty_id或facility_id,而不需要使用帶有三元運算符的長字符串where
?如何有條件地從Rails 3.2 Arel方法鏈添加或刪除成員?
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
我以前試過,但它只使用'query.paginate'行。讓我檢查一下,看看我做錯了什麼。 – rxgx 2012-04-24 21:25:00