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 但它仍然不起作用。
我能想到的对这种行为的唯一解释是:
self尚未保存,或但 的值tasks仍然被缓存。order涉及到SQL查询,所以需要访问数据库。
证据是您会看到 SQL 查询仅在order使用时回显到控制台。
作为替代方案,您可以Enumerable#sort_by按如下方式使用:
self.tasks.sort_by {|task| task.order_id}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5174 次 |
| 最近记录: |