AR.to_json работает в консоли, не работает в браузере - PullRequest
0 голосов
/ 03 мая 2009

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

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 метода, я получаю эту ошибку

TypeError в ControllerName # search_for_users
неверный тип аргумента Hash (ожидаемые данные)

и указанная строка является строкой с вызовом .to_json.

Это сбивает с толку меня, потому что код дословно тот же. Разница лишь в том, что когда я запускаю его в консоли, я ввожу условия вручную, но в моем методе я получаю запрос из params[:query]. Но я просто попробовал жестко запрограммировать запросы и получил тот же результат, так что я не думаю, что это проблема. Если я удаляю :include, я не вижу ошибки, но я также не получаю нужные данные.

Кто-нибудь знает, в чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 03 мая 2009

Есть несколько плагинов и гемов, которые могут вызвать сбой .to_json, если он включен в ваш контроллер. Я считаю, что жемчужина Twitter является одним из них (столкнулся с проблемой с этим некоторое время назад).

У вас есть "включить [что-нибудь]" или "требовать [что-нибудь]" в этом контроллере?

Если нет, я бы предложил временно удалить все плагины, которые вы используете для устранения неполадок и т. Д.

Наконец, что произойдет, если вы замените все действие контроллера просто: % w (1 2 3 4 5) .to_json

Это должно помочь вам определить причину неудачи.

0 голосов
/ 03 мая 2009

Всякий раз, когда код в тестах или консоли ведет себя не так, как в производственной среде (что является предположением ... ваш сайт работает в режиме разработки), это вызывает проблему порядка загрузки. В производственной среде все модели и контроллеры предварительно загружены, в других средах они загружаются при необходимости лениво. Запустите консоль с RAILS_ENV=production ./script/console и посмотрите, сможете ли вы воспроизвести ошибку таким способом. Как уже упоминалось в cscotta, есть несколько гемов и библиотек, которые могут мешать работе .to_json, в первую очередь упомянуть функциональность, которую вы получаете, когда вам требуется json. Я лично столкнулся с несколькими проблемами с этим.

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

Себ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...