我试图实现条件链接,这就是我得到的:
控制器索引动作代码:
@range_start = params[:range_start]
@range_stop = params[:range_stop]
Contract.within_range(@range_start, @range_stop)
型号代码:
def self.within_range(range_start = Date.today - 1.month, range_stop = nil)
self.started_after(range_start).started_before(range_stop)
end
def self.started_after(range_start)
if range_start.blank?
self
else
self.where('start_date >=?', range_start)
end
end
def self.started_before(range_stop)
if range_stop.blank?
self
else
self.where('start_date<=?', range_stop)
end
end
它有效,但看起来不太好。我尝试使用 对其进行一些改进tap
,但没有成功。如何改进此代码?
更新: in 可以转换为内联条件,但也许可以改进其他的东西?
range_start.blank? ? self : self.where('start_date >=?', range_start)
UPDATE2:如果range_stop
没有设置,这个代码不是真的有效,started_after
条件不适用。
我必须started_before
从不放松的首要条件是什么?