Я думаю, ваша проблема в том, что вы делаете created_at = ?, time_range
, а time_range не является конкретным значением, а an = ожидает определенное значение. Не могу точно объяснить причину этой ошибки, но вы можете получить решение.
Сделайте это вместо того, чтобы я попробовал его и прекрасно работает
1.9.3-p125 :014 > time_range = (1.month.ago.beginning_of_month..1.month.ago.end_of_month)
=> Sun, 01 Apr 2012 00:00:00 UTC +00:00..Mon, 30 Apr 2012 23:59:59 UTC +00:00
1.9.3-p125 :015 > Post.where(:created_at => time_range).where('id not in (?)', [1,2,3]).count
(0.3ms) SELECT COUNT(*) FROM "posts" WHERE ("posts"."created_at" BETWEEN '2012-04-01 00:00:00.000000' AND '2012-04-30 23:59:59.999999') AND (id not in (1,2,3))
=> 0
UPDATE
Не напрямую связана с вопросом, но вы должны поместить эти условия в областях с семантическим значением так у вас было бы Feed.from_last_month
и что-то вроде Feed.not_with_ids([1,2,3])
И для вашего que гу вы могли бы сделать
Feed.from_month.not_with_ids([1,2,3]).count
Для объяснения по поводу предупреждения проверьте @echristopherson комментарий ниже
Какие версии Ruby и Rails? – echristopherson