由于某种原因,订单方法在我的代码中不起作用。如果我在一个模型中做:
def apple
@tasks_array = self.tasks.to_a
end
使用上面的代码,返回一个数组。但如果我这样做:
def apple
@tasks_array = self.tasks.order('order_number').to_a
end
然后
[]
返回。这是应该返回的数组,并返回我写的第一个代码块:
[#<Task id: 145, title: "task 1", content: "", created_at: "2013-12-18 18:44:31",
updated_at: "2013-12-18 20:21:11", schedule_id: 79, amount: nil,
time_frame: "2013-12-19 15:00:00", state: "complete", denied: 3,
order_number: 0>, #<Task id: 146, title: "Task 2", content: "",
created_at: "2013-12-18 18:44:31", updated_at: "2013-12-18 20:24:06",
schedule_id: 79, amount: nil, time_frame: "2013-12-27 10:00:00",
state: "complete", denied: 1, order_number: 1>]
我也试过取出.to_a但它仍然无效。
答案 0 :(得分:3)
我能想到的唯一解释是:
self
尚未保存,或但tasks
的值仍然缓存。 order
涉及SQL查询,因此需要访问数据库。
这样做的证据是,只有在order
被使用的情况下,您才会看到一个回显到控制台的SQL查询。
作为替代方案,您使用Enumerable#sort_by
如下:
self.tasks.sort_by {|task| task.order_id}
答案 1 :(得分:-3)
您需要在ActiveRecord查询中指定升序或降序。
尝试:
self.task.order('order_number ASC').to_a
或
self.task.order('order_number DESC').to_a