AR.to_json работает в консоли, не работает в браузере
-
03-07-2019 - |
Вопрос
У меня есть этот блок кода:
users = Array.new
users << User.find(:all, :conditions => ["email like ?", "%foo%"])
users << User.find(:all, :conditions => ["name like ?", "%bar%"])
users.flatten!
users.uniq!
puts users.to_json :include => [:licenses]
Когда я запускаю его с помощью скрипта/консоли, он возвращает именно то, что, по вашему мнению, должно быть: JSON-представление массива пользователей, который я нашел, сгладил и унифицировал.Но запуск той же самой строки кода как части search_for_users
метод, я получаю эту ошибку
Ошибка типа в ControllerName#search_for_users
неправильный тип аргумента Хэш (ожидаемые данные)
и указанная строка — это строка с вызовом .to_json.
Меня это сбивает с толку, потому что код дословно тот же.Разница лишь в том, что когда я запускаю его в консоли, я ввожу условия вручную, а в своем методе я беру запрос из params[:query]
.Но я только что попробовал жестко запрограммировать запросы и получил тот же результат, поэтому не думаю, что это проблема.Если я удалю :include
, Я не вижу ошибки, но и не получаю нужные данные.
Кто-нибудь знает, в чем может быть проблема?
Решение
Есть несколько плагинов и гемов, которые могут вызвать сбой .to_json, если он включен в ваш контроллер. Я считаю, что жемчужина Twitter является одним из них (столкнулся с проблемой некоторое время назад).
У вас есть "включить [что-нибудь]"? или " требовать [что угодно] " в этом контроллере?
Если нет, я бы предложил временно удалить все плагины, которые вы используете для устранения неполадок и т. д.
Наконец, что произойдет, если вы замените все действие контроллера просто: % w (1 2 3 4 5) .to_json
Это должно помочь вам определить причину неудачи.
Другие советы
Всякий раз, когда поведение кода в тестах или консоли отличается от поведения производственной среды (что является предположением...возможно, ваш сайт работает в режиме разработки), это вызывает проблему с порядком загрузки.В производственной среде все модели и контроллеры предварительно загружены, в других средах они загружаются лениво при необходимости.Запустите консоль с RAILS_ENV=production ./script/console
и посмотрите, сможете ли вы воспроизвести ошибку таким образом.Как упомянул cscotta, есть несколько драгоценных камней и библиотек, которые могут мешать работе .to_json, прежде всего упомянем о функциональности, которую вы получаете, когда вам требуется «json».Лично я столкнулся с рядом проблем.
Надеюсь это поможет
Себ