Domanda

Ho questo blocco di codice:

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]

Quando lo eseguo usando script / console, restituisce esattamente ciò che si potrebbe pensare, una rappresentazione JSON dell'array di utenti che ho trovato, appiattito e unificato. Ma eseguendo quella stessa riga di codice come parte di un metodo search_for_users , ottengo questo errore

  

TypeError in ControllerName # search_for_users
  Tipo di argomento errato Hash (dati previsti)

e la linea a cui fa riferimento è la linea con la chiamata .to_json.

Mi sta sconcertando perché il codice è letteralmente lo stesso. L'unica differenza è che quando lo eseguo nella console, inserisco le condizioni manualmente, ma nel mio metodo sto estraendo la query da params [: query] . Ma ho appena provato a codificare le query e ho ottenuto lo stesso risultato, quindi non credo che questo sia il problema. Se rimuovo il : include , non vedo l'errore, ma non ottengo nemmeno i dati desiderati.

Qualcuno ha idea di quale potrebbe essere il problema?

È stato utile?

Soluzione

Ci sono alcuni plugin e gemme che possono causare il fallimento di .to_json se inclusi nel controller. Credo che il gioiello di Twitter sia uno di questi (si è verificato un problema con questo tempo fa).

Hai " include [nulla] " o " richiedono [qualsiasi cosa] " in questo controller?

In caso contrario, suggerirei di rimuovere temporaneamente eventuali plugin che stai utilizzando per risolvere i problemi, ecc.

Infine, cosa succede se si sostituisce l'intera azione del controller semplicemente: % w (1 2 3 4 5) .to_json

Ciò dovrebbe aiutarti a individuare ciò che non funziona.

Altri suggerimenti

Ogni volta che il codice nei test o la console si comporta diversamente dall'ambiente di produzione (il che è una supposizione ... potresti eseguire il tuo sito in modalità di sviluppo), questo richiede un problema con l'ordine di caricamento. Nell'ambiente di produzione, tutti i modelli e controller sono precaricati, in altri ambienti vengono caricati pigramente quando necessario. Avvia la tua console con RAILS_ENV = production ./script/console e vedi se riesci a riprodurre l'errore in questo modo. Come accennato da cscotta, ci sono un paio di gemme e librerie, che possono interferire con .to_json, per prima cosa per menzionare la funzionalità che ottieni quando hai bisogno di "json". Personalmente ho riscontrato diversi problemi con questo.

Spero che questo aiuti

Seb

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top