Pergunta

Eu tenho este bloco de código:

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 eu executá-lo usando script / console, ele retorna exatamente o que você acha que deveria, uma representação JSON da Matriz de usuários que eu encontrei, achatada, e uniquified. Mas correr essa mesma linha de código como parte de um método search_for_users, eu recebo este erro

TypeError em controllername # search_for_users
errado tipo de argumento Hash (espera de dados)

e a linha referenciada é a linha com a chamada .to_json.

Isso está me confundindo porque o código é literalmente o mesmo. A única diferença é que quando eu estou correndo-lo no console, eu estou entrando as condições manualmente, mas no meu método, eu estou puxando a consulta a partir params[:query]. Mas, eu apenas tentei codificar as consultas e obteve o mesmo resultado, então eu não acho que é o problema. Se eu remover o :include, eu não ver o erro, mas eu também não obter os dados que deseja.

Alguém tem alguma idéia do que o problema pode ser?

Foi útil?

Solução

Existem alguns plugins e pedras preciosas que podem causar .to_json a falhar se incluído no seu controlador. Eu acredito que a gema Twitter é um deles (ran em um problema com este algum tempo atrás).

Você tem "incluem [nada]" ou "exigem [nada]" neste controlador?

Se não, eu sugiro remover temporariamente quaisquer plugins que você está usando para solucionar problemas, etc.

Finalmente, o que acontece se você substituir a ação do controlador inteiro com simplicidade: % W (1 2 3 4 5) .to_json

Isso deve ajudá-lo a fixar para baixo o que está a falhar.

Outras dicas

Sempre que o código em testes ou se comporta diferentes de console do ambiente de produção (que é um palpite ... você pode estar executando o seu site no modo de desenvolvimento), isso exige uma questão de ordem de carregamento. Em ambiente de produção, todos os modelos e controladores são pré-carregados, em outros ambientes eles são carregados preguiçosamente quando necessário. Comece o seu console com RAILS_ENV=production ./script/console e veja se você pode reproduzir o erro desta forma. Como cscotta mencionado, há um par de gemas e librarys, que podem interferir com .to_json, primeiro a mencionar a funcionalidade, que você começa quando você precisar 'json'. Eu, pessoalmente, correu para vários problemas com isso.

Espero que isso ajude

Seb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top