Rails Active Record Query - 检索单个对象的问题

时间:2012-10-02 23:47:49

标签: ruby-on-rails ruby-on-rails-3 activerecord

我的目标是在Rails Active Record查询中返回单个对象。我想在表格按created_at日期排序时检索最新记录。因此,在下面的示例中,这意味着我想要返回ID为2的记录。我不明白为什么下面的4个查询都会返回相同的结果?

销售表记录

 +----+---------+-------+------------+----------------------------+
 | ID | user_id | price | sale_date  |         created_at         |
 +----+---------+-------+------------+----------------------------+
 |  1 |       1 |   200 | 2012-08-07 | 2012-10-02 23:01:46.706727 |
 |  2 |       1 |   400 | 2009-05-11 | 2012-10-02 23:09:01.342879 |
 +----+---------+-------+------------+----------------------------+

查询:

 <%= current_user.sales.order("created_at").last.price %>

返回:200

 <%= current_user.sales.order("created_at DESC").last.price %>

返回:200

 <%= current_user.sales.order("created_at ASC").last.price %>

返回:200

 <%= current_user.sales.last.price %>

返回:200

我也尝试过:

 <%= current_user.sales.last("created_at").price %>

返回:undefined method 'assert_valid_keys' for "created_at":String

2 个答案:

答案 0 :(得分:1)

如果Sale类定义了default_scope,并且它包含order子句,那么您可以使用

.reorder("created_at DESC")

而不是

.order("created_at DESC")

答案 1 :(得分:0)

如果您愿意,请尝试这种神奇的咒语:

current_user.sales.sort_by(&:created_at).last