ActiveRecord :: Relation.concat не работает в Rails 5 - PullRequest
0 голосов
/ 02 ноября 2018

Глупый вопрос, но я не уверен, почему это будет работать в 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

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

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

1 Ответ

0 голосов
/ 03 ноября 2018

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

  • 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.

...