我的模型上有自定义方法,我想在where条件下使用它,我已经完成了自定义方法的排序,但无法找到自定义条件下搜索的方法。
现在我有了这个,在我的模特中
attr_accessible :end, :start
def time_left
self.end.to_i - Time.now.utc.to_i - Time.now.utc_offset
end
def time_left_to_start
self.start.to_i - Time.now.utc.to_i - Time.now.utc_offset
end
def status
if self.time_left_to_start > 0
1 #proximamente
elsif self.time_left_to_start < 0 and self.time_left > 0
2 #funcionando
else
3 #finalizado
end
end
和我的控制器
def index
@next_events = Event.all.sort_by(&:time_left).reverse!.reject { |e| e.status != 1 }.take(5)
end
我知道我可以在where方法上写下整个条件,但我的想法是不要重复我的自我并避免循环所有事件以删除状态不是1的每个事件,我只需要每次最后5次并且看起来对我来说真的很糟糕,每次都要向db请求所有记录。 在此先感谢,问候!
答案 0 :(得分:1)
重构我的代码后,我遇到了这个
def time_left
(self.end - Time.now).to_i
end
def time_left_to_start
(self.start - Time.now).to_i
end
def status
if self.start < Time.now and self.end > Time.now
1 #En curso
elsif self.start > Time.now
2 #Proximamente
else
3 #Finalizado
end
end
def self.status(status)
if status == 1 #eventos en curso
where("(events.start < ?) AND (events.end > ?)", Time.now, Time.now)
elsif status == 2 #proximos eventos
where("events.start > ?", Time.now)
elsif status == 3 #eventos finalizados
where("events.end < ?", Time.now)
elsif status == 4 #eventos proximos y en curso
where("events.end > ?", Time.now)
end
end
并进行此类查询
@next_events = Event.status(2).order('events.start DESC').reject { |e| e.time_left_to_start > 12.hour }.take(18)
感谢您的时间,问候!