Обновление атрибутов по нескольким индексам в массиве.Использование mongoid в Rails 3 - PullRequest
0 голосов
/ 17 октября 2011

Внутри моей тестовой базы данных я бы хотел активировать флаг "new_item" для тестирования.Метод уже работает в моих тестах.Итак, теперь я устанавливаю поля create_at и publ_at всех записей на 1 месяц назад, а затем хочу установить несколько избранных в массиве, который будет опубликован вчера.

Я использую следующий код для установки всех 1 записи: (В Rails 3.1.1)

yesterday = Time.now - 1.day
last_month = Time.now - 1.month
Item.update_all(:created_at => last_month, :published_at => last_month)
Item.visible[1].update_attributes(:created_at => yesterday, :published_at => yesterday)

Что работает.Тем не менее, как я могу выбрать несколько записей в этом массиве, а не только индекс [1].то есть.[1,4,5,8,10] и т. Д.

Я считаю, что update_attributes не работает с несколькими записями.И я не уверен, как выбрать несколько индексов в существующем массиве.

Надеюсь, это имеет смысл ...

Заранее спасибо,

Адам.

1 Ответ

0 голосов
/ 18 октября 2011

update_attributes - это метод экземпляра, т.е. он будет работать с экземпляром модели.update_all - это метод критериев (может быть делегатом модельного класса для критериев) и может быть связан с критериями mongoid.Если у вас есть некоторые критерии для получения индексов документов в массиве, вы можете сделать:

Item.visible.where(:some_other_field => "some_other_value").
    update_all(:created_at => last_month, :published_at => last_month)

Если у вас нет критериев, но вы выбираете элементы вручную, вы можете сделать:

# instead of `model_array.update_attributes`
ids = model_array.map(&:id)
Item.all.for_ids(ids).update_all(:created_at => last_month, :published_at => last_month)
...