0

次のクエリがあります。

Score.where("build_id => ? AND metric_id => ? ",params[:buildIds], params[:metricIds])

ここで、params[:buildIds]、params[:metricIds] は整数の配列です。次のエラーが表示されます。

PG::Error: ERROR:  operator does not exist: integer => integer
LINE 1: SELECT "scores".* FROM "scores"  WHERE (build_id => 1,2 AND ...
                                                         ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "scores".* FROM "scores"  WHERE (build_id => 1,2 AND metric_id => 1,13 )

何か助けはありますか?

ありがとう

4

1 に答える 1

2

最も簡単な方法は、2 つのwhere呼び出しを連鎖させて、ActiveRecord に必要な SQL を認識させることです。

Score.where(:build_id => params[:buildIds]).where(:metric_id => params[:metricIds])

これにより、SQL で s が生成されるINため、データベースには次のように表示されます。

where build_id in (1, 2) and metric_id in (1, 13)

=>エラー メッセージは、PostgreSQL に両側が整数の演算子がないことを示しています。これ=>は、PostgreSQL の構文ではなく、Ruby の構文であるためです (もちろん、hstore がインストールされていて、hstore が=>両側で文字列を必要としている場合を除きます)。

于 2012-08-09T18:42:44.913 に答える