У меня есть набор активных объектов записи в массиве.
Я просто хочу удалить объект из массива не в базе данных
a = Model.limit(2)
b = Model.first
a.delete(b)
возвращающее значение nil
Не удаляет
в любом случае?
Ответ 1
a.to_a - [b]
Фон: a.to_a преобразует отношение в массив в памяти. [b] - это массив с только элементом, который вы хотите удалить (в памяти). a.to_a - [b] выполняет подстановку массива.
(В Rails 3.2.to_a автоматически применяется к отношению при обращении к нему. Я согласен с gregates: лучше преобразовать отношение в массив явно)
Ответ 2
Здесь потенциально некоторая путаница, потому что в ActiveRecord, Model.limit(2) не возвращает массив.
Model.limit(2).class #=> ActiveRecordRelation
Поэтому, когда вы вызываете a.delete(b), вы не можете вызывать Array#delete.
Попробуйте это вместо:
a = Model.limit(2).to_a # Executes the query and returns an array
b = Model.first
a.delete(b)