2012-10-02 20 views
0

我的目标是在Rails Active Record查询中返回单个对象。我想在表格按照created_at日期排序时检索最近的记录。所以,在下面的例子中,这意味着我想返回ID为2的记录。我不明白为什么下面的4个查询返回相同的结果?Rails Active Record Query - 检索单个对象的问题

销售表中的记录

+----+---------+-------+------------+----------------------------+ 
| 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

回答

1

如果Sale类具有已定义的default_scope,和它包括一个order条款,那么你可以使用,如果你愿意

.reorder("created_at DESC") 

,而不是

.order("created_at DESC") 
+0

哇,这是它。我不知道你没有看到我的模型是怎么猜到的,但是工作很好! – diasks2

0

试试这个神奇的咒语:

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

哦,是的,检索一个项目,加载整个表格,并在内存中排序... – rewritten

相关问题