2013-12-19 4 views
2

По какой-то причине метод заказа не работает в моем коде. Если я делаю в модели:рельсы. Метод заказа не работает

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

вы не можете приказать нулевыми значениями, ORDER_NUMBER равна нулю в массиве вы показали – bjhaid

+0

я отправил неправильный массив переполнению стека. Значения не равны нулю. Я редактировал сообщение. – Philip7899

ответ

2

Единственное объяснение, которое я могу придумать для такого поведения является то, что:

  • self еще должны быть сохранены или
  • записи задачи не существуют в базе данных в то время это утверждение не выполняется
  • записи задачи больше не связаны с самим

но значение tasks остается в кэше. order включает SQL-запрос, поэтому он требует доступа к базе данных.

Доказательством этого является то, что вы видите SQL-запрос, отобранный на консоль только для используемого order.

В качестве альтернативы, вы случай использования Enumerable#sort_by следующим образом:

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

OH. В этом есть смысл. Это не было бы в db, потому что это происходит при проверке. Вы знаете, как заказать массив, который не находится в базе данных? – Philip7899

+0

Вы можете использовать 'sort' или' sort_by' из 'Enumerable' –

+0

Как вы это сделаете? Я просматриваю документацию, и я не могу понять, как сделать ее сортировкой по номеру заказа – Philip7899

-2

Необходимо указать как по возрастанию, так и по убыванию в запросе ActiveRecord.

Try:

self.task.order('order_number ASC').to_a 

или

self.task.order('order_number DESC').to_a 
+0

Спасибо, я попробовал, но это не сработало. Кроме того, я не тот, кто проголосовал за этот ответ. – Philip7899

+1

'ASC' и' DESC' являются необязательными, а 'ASC' предполагается, если они не присутствуют. –

Смежные вопросы