2009-05-03 2 views
0

У меня есть этот блок кода:AR.to_json работы в консоли, не удается в браузере

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, я не вижу ошибки, но я также не получаю нужные данные.

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

+0

Случается ли проблема, когда пользователи содержат только один пользователь, извлекались постоянными ID, а не User.find? – pts

+0

Нет, если я нахожу (some_id) .to_json: include => [: license] 'Я не имею никаких лицензий. Думаю, это указывает на проблему с 'Enumerable # to_json'? – jxpx777

ответ

1

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

У вас есть «включить [ничего]» или «потребовать [ничего]» в этом контроллере?

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

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

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

+0

Да! Наверху была строка 'require' json''. Удаление этого исправлено. Большое спасибо! – jxpx777

0

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

Надеется, что это помогает

Себа