rails .order 方法不起作用

Phi*_*899 5 ruby postgresql ruby-on-rails ruby-on-rails-4

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

def apple
    @tasks_array = self.tasks.to_a
end
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,返回一个数组。但如果我这样做:

def apple
    @tasks_array = self.tasks.order('order_number').to_a
end
Run Code Online (Sandbox Code Playgroud)

然后

[]
Run Code Online (Sandbox Code Playgroud)

被退回。这是应该返回的数组,它与我编写的第一个代码块一起返回:

[#<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>] 
Run Code Online (Sandbox Code Playgroud)

我也试过取出 .to_a 但它仍然不起作用。

Pet*_*vin 3

我能想到的对这种行为的唯一解释是:

  • self尚未保存,或
  • 执行此语句时数据库中不存在任务记录
  • 任务记录不再与自身相关联

但 的值tasks仍然被缓存。order涉及到SQL查询,所以需要访问数据库。

证据是您会看到 SQL 查询仅在order使用时回显到控制台。

作为替代方案,您可以Enumerable#sort_by按如下方式使用:

self.tasks.sort_by {|task| task.order_id}
Run Code Online (Sandbox Code Playgroud)