2
準備済みの文をレールに使用して "IN"クエリを実行しています。 PG :: InvalidTextRepresentationエラーが表示されます。PG :: InvalidTextRepresentation:エラー:整数の入力構文が無効です
コード:
def mark_ineligible(match_ids)
ids = match_ids.join(", ")
result = epr("mark_matches_as_ineligible",
"UPDATE matches SET is_eligibile=false WHERE id IN ($1)",
[ids])
end
def epr(statementname, statement, params)
connection = ActiveRecord::Base.connection.raw_connection
begin
result = connection.exec_prepared(statementname, params)
return result
rescue PG::InvalidSqlStatementName => e
begin
connection.prepare(statementname, statement)
rescue PG::DuplicatePstatement => e
# ignore since the prepared statement already exists
end
result = connection.exec_prepared(statementname, params)
return result
end
end
この使用を起動しようとしている:
match_ids = [42, 43]
mark_ineligible match_ids
PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "42, 43"
from (irb):24:in `exec_prepared'
from (irb):24:in `rescue in epr'
from (irb):15:in `epr'
from (irb):8:in `mark_ineligible'
from (irb):35
こちらを助けてください。私はなぜこのエラーが発生しているのか、それを修正する方法を知りたい。 、
def mark_ineligible(match_ids)
result = epr("mark_matches_as_ineligible",
"UPDATE matches SET is_eligibile=false WHERE id IN ($1)", match_ids)
end
としたときにmark_ineligible
を呼び出すを引数として配列を渡す:
おかげで、
代わりに '[IDS]'渡すのでは、それが配列なので 'ids'を渡してみてください。 – dp7
こんにちは、 "ids"はコンマで区切られた文字列です。私は最終的なクエリが "UP_ATEにマッチするように期待しています。SET is_eligibile = false WHERE id IN(42,43)" – anshul410
@ ansul410 'ids = match_ids.join("、 ")' - これをあなたの 'mark_ineligible'メソッドから削除し、クエリに 'match_ids'を直接渡します。 – dp7