Rails - Ruby可枚举按日期选择

时间:2016-01-08 18:42:28

标签: ruby-on-rails ruby

在我的Expense模型中,我有一个名为payment_date的日期属性。这是日期格式而不是日期时间。

在我的一个观点中,我以几种不同的格式显示这些数据。我想避免多次查询。

例如,在Expense.all旁边,我需要显示年初至今的费用。我认为我会尝试从@expenses = Expense.all中提取YTD数据,而不是运行两个查询来提取相同的信息。

现在我正在尝试使用:

@expenses.select { |ex| ex.payment_date > Date.today.beginning_of_year }

但这会返回一个空白数组。

是否可以按日期选择结果,我在哪里弄乱?

2 个答案:

答案 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)

这只会从数据库返回您关心的结果。