Массив с активной моделью записи - PullRequest
2 голосов
/ 17 июня 2009

Я хочу показать в виде задачи на день в бетоне (сегодня). у этих задач есть приблизительное время, которое должно составлять 6 часов в день.

в модели у меня этот метод:

def self.tasks_for_today
  total_time = 0
  r = Array.new
  all(:conditions => "finished = 0").each do | t |
    total_time += t.estimated_time
    r << t if total_time <= 6
  end  
  r 
end

и работает нормально, но мне нужно, чтобы переменная "r" была экземпляром модели Tasks, а не экземпляром класса Array ...

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 18 июня 2009

Ваш метод возвращает массив задач, а Task.all также возвращает массив задач. Попробуйте:

>> Task.all.class
=> Array

И с любым массивом вы можете делать такие вещи, как:

t.first
t.each {|a| ... }

Что именно вы хотите сделать со своим результатом?

0 голосов
/ 19 июня 2009

Спасибо, ребята, это была моя ошибка, метод делает то, что я хочу ...

Вот окончательный код:

def self.tasks_for_today
  total_time = 0
  r = Array.new
  all(:conditions => "finished = 0").each do | t |
    total_time += t.estimated_time
    total_time <= 6 ? r << t : break
  end
  r
end
0 голосов
/ 17 июня 2009

Один рефакторинг, который вы уже можете сделать, - это использовать named_scoped для ваших незавершенных задач:

class Shirt < ActiveRecord::Base
  named_scope :unfinished, :conditions => {:finished => false}
end

Вы не хотите возвращать экземпляр (экземпляр означает только одну задачу).

Возможно, вы сможете заказать свои задачи, получить текущую сумму , а затем вернуть только задачи, у которых промежуточная сумма ниже 6. Мне нужно больше об этом думать, но если вы это сделаете таким образом, вы в конечном итоге будете использовать find_by_sql и магию SQL, предоставляемую выбранным вами механизмом БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...