在我的Expense模型中,我有一个名为payment_date的日期属性。这是日期格式而不是日期时间。
在我的一个观点中,我以几种不同的格式显示这些数据。我想避免多次查询。
例如,在Expense.all
旁边,我需要显示年初至今的费用。我认为我会尝试从@expenses = Expense.all
中提取YTD数据,而不是运行两个查询来提取相同的信息。
现在我正在尝试使用:
@expenses.select { |ex| ex.payment_date > Date.today.beginning_of_year }
但这会返回一个空白数组。
是否可以按日期选择结果,我在哪里弄乱?
答案 0 :(得分:4)
要将今年1月1日列入您的YTD费用,请在>=
区块中使用>
代替select
。
答案 1 :(得分:0)
既然你用 Rails 标记了它,查询它的一种更高效的方法是使用 ActiveRecord/SQL。
如果您有很多记录,执行 @expenses = Expense.all
然后在该集合上使用 Ruby 可枚举 select
会将所有费用从数据库加载到内存中。这可能会很慢,甚至可能导致内存不足错误!
你可以这样做(假设数据库是 Postgres):
@ytd_expenses = Expense.where("payment_date >= ?", Date.today.beginning_of_year)
这只会从数据库返回您关心的结果。