Rails Quiz (поиск ошибок в определении объема) - PullRequest
0 голосов
/ 04 мая 2011

Следующее определение области действия содержит две ошибки, из-за которых она не работает должным образом.Можете ли вы найти их?

named_scope :articles_to_display, 
            :conditions => ["articles.publish_at < (?)", Time.now]

(столбец publish_at содержит время / дату, когда статья должна быть опубликована).Ошибки фундаментальные, а не опечатки.

Я либо приму первый правильный ответ, либо опубликую решение через несколько дней.

Ответы [ 4 ]

4 голосов
/ 04 мая 2011

Первая проблема заключается в том, что Time.now оценивается на уровне класса (когда файл читается Ruby) и не оценивается при использовании области (что, скорее всего, вы ожидаете).В этом случае вам нужно обернуть генерацию условий в лямбду / процедуру.

named_scope :articles_to_display, lambda { 
   :conditions => ["articles.publish_at < (?)", Time.now]
}

Вторая проблема, вероятно, заключается в том, что вы хотите использовать Time.zone.now вместо Time.now, чтобы соблюдатьлокализованное время текущего запроса, а не системное время на сервере.

Вот что вы хотите получить:

named_scope :articles_to_display, lambda { 
   :conditions => ["articles.publish_at < (?)", Time.zone.now]
}
2 голосов
/ 04 мая 2011

Для дополнительной информации, принятый ответ, преобразованный в рельсы 3, является:

scope :articles_to_display, lambda { 
      where("articles.publish_at < (?)", Time.zone.now)
}
2 голосов
/ 04 мая 2011
named_scope :articles_to_display, :conditions => ["articles.publish_at < (?)", DateTime.now]

Или попробуйте proc

named_scope :articles_to_display, proc{ :conditions => ["articles.publish_at < (?)", DateTime.now]}

Вот изображение сверхчеловека, которое было удалено: D

0 голосов
/ 04 мая 2011
named_scope :articles_to_display, 
            :conditions => ["articles.publish_at IS NOT NULL AND articles.publish_at <= (?)", Time.now]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...