rails .order方法不起作用

时间:2013-12-19 23:03:56

标签: ruby-on-rails ruby postgresql ruby-on-rails-4

由于某种原因,订单方法在我的代码中不起作用。如果我在一个模型中做:

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但它仍然无效。

2 个答案:

答案 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