Question

J'ai ce bloc de code:

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]

Lorsque je l'exécute à l'aide d'un script / console, il renvoie exactement ce que l'on pourrait penser, une représentation JSON du tableau d'utilisateurs que j'ai trouvés, aplati et non unique. Mais en exécutant cette même ligne de code dans le cadre d’une méthode search_for_users , je reçois cette erreur

  

TypeError dans ControllerName # search_for_users

  type d'argument incorrect Hash (Data attendu)

et la ligne référencée est la ligne avec l'appel .to_json.

Cela me déconcerte parce que le code est le même. La seule différence est que lorsque je l'exécute dans la console, je saisis les conditions manuellement, mais dans ma méthode, je extrait la requête de params [: query] . Mais, j'ai juste essayé de coder en dur les requêtes et obtenu le même résultat, donc je ne pense pas que ce soit le problème. Si je supprime : include , je ne vois pas l'erreur, mais je n'obtiens pas non plus les données que je souhaite.

Quelqu'un a-t-il une idée du problème?

Était-ce utile?

La solution

Il existe quelques plugins et gems qui peuvent provoquer l'échec de .to_json s'ils sont inclus dans votre contrôleur. Je crois que le joyau de Twitter est l’un d’eux (il ya un problème avec ce problème de retour).

Avez-vous " inclure [quelque chose] & "; ou "demander [quelque chose]" dans ce contrôleur?

Si ce n'est pas le cas, je suggérerais de supprimer temporairement tous les plug-ins que vous utilisez pour résoudre les problèmes, etc.

Enfin, que se passera-t-il si vous remplacez toute l'action du contrôleur par simplement: % w (1 2 3 4 5) .to_json

Cela devrait vous aider à identifier ce qui ne fonctionne pas.

Autres conseils

Chaque fois que le code dans les tests ou la console se comporte différemment de l'environnement de production (ce qui est peu probable ... vous exécutez peut-être votre site en mode développement), cela appelle un problème d'ordre de chargement. En environnement de production, tous les modèles et les contrôleurs sont préchargés, dans d'autres environnements, ils sont chargés paresseusement lorsque cela est nécessaire. Démarrez votre console avec RAILS_ENV = production ./script/console et voyez si vous pouvez reproduire l'erreur de cette façon. Comme cscotta l’a mentionné, il existe quelques gemmes et bibliothèques qui peuvent interférer avec .to_json, tout d’abord pour mentionner la fonctionnalité que vous obtenez lorsque vous avez besoin de 'json'. J'ai personnellement rencontré plusieurs problèmes avec cela.

J'espère que cela vous aidera

Seb

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top