Псевдоним таблицы ActiveRecord AREL прерывается
Ошибка, вероятно, из-за того, что ActiveRecord AREL потерял след того, как суммировать пустой массив.
Соответствующая строка кода находится в файле alias_tracker.rb:
count.sum
Если count является пустым массивом, строка оценивается как:
[].sum
В Ruby, который не работает:
$ irb
> [].sum
NoMethodError: undefined method `sum' for []:Array
Rails ActiveSupport Enumerable # sum
В Rails это успешно, потому что ActiveSupport создает Enumerable # sum
$ irb
> require 'active_support/core_ext/enumerable'
> [].sum
=> 0
Ваша проблема, вероятно, в том, что некоторая несвязанная область вашего приложения также создает Enumerable # sum или Array # sum. Несвязанный код переписывает метод Rails.
Это может происходить в вашем коде или в другом камне. Драгоценный камень Rails загружается раньше, обычно первым в вашем Gemfile, и любой последующий гем может мешать Rails.
Как это исправить?
Вы написали метод с именем sum, возможно, в модуле с именем Enumerable или Array? Если так, то это хорошее место для начала. Вы можете переименовать свой метод, или вы можете изменить свой метод, чтобы он соответствовал методу Rails, заменив код #sum следующим кодом:
module Enumerable
def sum(identity = 0, &block)
if block_given?
map(&block).sum(identity)
else
inject(:+) || identity
end
end
end
Если вы не написали метод с именем sum в своем коде, то конфликт, скорее всего, в геме, который вы используете. Попробуйте закомментировать используемые вами драгоценные камни и перезагрузите приложение.
Вы можете искать драгоценный камень, который определяет метод с именем sum следующим образом:
$ cd /usr/lib/ruby/gems
$ find | xargs grep "def sum\b"
Вы используете какие-нибудь драгоценные камни с именем sixarm? Если так, свяжитесь со мной, и я исправлю их для вас. Это я, и некоторые из них определяют #sum для использования со статистическими инструментами и утилитами.
Надеюсь, это поможет. Можете ли вы опубликовать здесь, если это решит вашу проблему?