由于某种原因,order方法在我的代码中不起作用。如果我在模型中这样做:

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

我也试过了,但还是不行。

最佳答案

我能想到的唯一解释是:
self尚未保存,或者
执行此语句时,数据库中不存在任务记录
任务记录不再与self关联
但是tasks的值仍然被缓存。order涉及一个sql查询,因此需要访问数据库。
这一点的证据是,您只看到在使用order的情况下,一个sql查询返回到控制台。
另一种方法是,使用Enumerable#sort_by用例如下:

self.tasks.sort_by {|task| task.order_id}

09-30 17:36
查看更多