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.2SomeModel.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
,