2014-03-19 2 views
0

У меня есть пользовательский метод для моей модели, и я хочу использовать его в таком состоянии, я уже выполняю это для сортировки с помощью пользовательских методов, но не могу найти способ поиска с помощью пользовательские условия.Rails - где с пользовательским модемным условием условия

Теперь у меня есть это, в моей модели

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 

я знаю, что могу написать все условия на метод, где, но моя идея не повторите свое «я» и избегайте цикла для всех событий, чтобы удалить каждый из них, где статус не равен 1, мне просто нужны последние 5 каждый раз, и мне кажется, что действительно плохая идея просить db для всех записей каждый раз. Заранее благодарим!

+0

Это невозможно сделать. Думаю, вам нужно написать кусок кода SQL. –

ответ

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) 

Спасибо за ваше время, пожеланий!

Смежные вопросы