ActiveRecord::Relation.concat не работает в Rails 5

Глупый вопрос, но я не уверен, почему это будет работать в Rails 4.2, но не в Rails 5.2.

FamilyCharacteristic.where(family_id: @user.family_ids)
                    .concat(@user.characteristics)

Спецификации терпят неудачу в 5.2:

Failure/Error:
       FamilyCharacteristic.where(family_id: @user.family_ids)
                           .concat(@user.characteristics)

     NoMethodError:
       undefined method `concat' for #<ActiveRecord::Relation []>
       Did you mean?  count

Конкат был удален из ActiveRecord::Relation в 5.2 или был FamilyCharacteristic.where(family_id: @user.family_ids) каким-то другим объектом в < 4.2?

Спасибо за любую помощь.

1 ответ

Решение

Я немного покопался и узнал, что:

  • FamilyCharacteristic.where(family_id: @user.family_ids)класс не изменился, это все еще ActiveRecord::Relation
  • Relation не сделал и до сих пор не определяет свой собственный concat метод, но он был делегирован Array#concat пока этот коммит не произошел, так в Rails 4.2 SomeModel.where(id: ids).concat(some_records)(который возвращает Array) было на самом деле так же, как SomeModel.where(id: ids).to_a.concat(some_models)
  • После упомянутых изменений ActiveRecord::Delegationв Rails 5.2 единственные методы, делегированные Array те, которые указаны в этом модуле и concat не среди них

Подводить итоги - concat из вашего примера никогда не был частью ActiveRecord но был делегирован Array#concat и вот почему это сработало. Он больше не делегируется в Rails 5, поэтому NoMethodError,

Другие вопросы по тегам