Вопрос

У меня есть этот блок кода:

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».Лично я столкнулся с рядом проблем.

Надеюсь это поможет

Себ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top