質問

このコードブロックがあります:

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 メソッドを実行すると、このエラーが発生します

ControllerName#search_for_users の TypeError
引数の型が間違っています ハッシュ (予期されるデータ)

参照される行は .to_json 呼び出しを含む行です。

コードが文字通り同じなので、困惑しています。唯一の違いは、コンソールで実行しているときは条件を手動で入力していますが、私のメソッドではクエリを取得していることです。 params[:query]. 。ただし、クエリをハードコーディングしようとしただけで同じ結果が得られたため、それが問題ではないと思います。を削除すると、 :include, エラーは表示されませんが、必要なデータも取得できません。

問題が何であるかわかる人はいますか?

役に立ちましたか?

解決

コントローラーに含まれている場合、.to_json が失敗する原因となる可能性のあるプラグインや gem がいくつかあります。Twitter の逸品もそのうちの 1 つだと思います (少し前にこれに関する問題に遭遇しました)。

このコントローラーに「[何か] を含める」または「[何か] を要求する」がありますか?

そうでない場合は、トラブルシューティングなどに使用しているプラ​​グインを一時的に削除することをお勧めします。

最後に、コントローラーのアクション全体を次のように置き換えるとどうなるでしょうか。%w(1 2 3 4 5).to_json

これは、何が失敗しているのかを特定するのに役立つはずです。

他のヒント

テストまたはコンソールのコードが本番環境とは異なる動作をする場合(推測...サイトを開発モードで実行している可能性があります)、これは読み込み順序の問題を引き起こします。実稼働環境では、すべてのモデルとコントローラーが事前にロードされますが、他の環境では必要に応じて遅延ロードされます。 RAILS_ENV = production ./script/console を使用してコンソールを起動し、この方法でエラーを再現できるかどうかを確認します。 cscottaが述べたように、いくつかのgemとライブラリがあり、それらは.jjを必要とするときに取得する機能について言及するために、最初に.to_jsonに干渉する可能性があります。私は個人的にそれに関していくつかの問題に遭遇しました。

これが役立つことを願って

セブ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top