[解決済み] railsで動的バインディングを使用して生の更新SQLを実行する方法
2022-10-13 20:49:05
質問
以下のようなraw sqlで1回だけ更新を実行したい。
update table set f1=? where f2=? and f3=?
このSQLは
ActiveRecord::Base.connection.execute
で実行されますが、動的なパラメータ値をメソッドに渡す方法がわかりません。
誰か私にそれについてのヘルプを与えることができますか?
どのように解決するのですか?
Rails APIはこれを一般的に行うためのメソッドを公開していないようです。MySQLのように、基礎となる接続にアクセスして、そのメソッドを使用してみてはいかがでしょうか。
st = ActiveRecord::Base.connection.raw_connection.prepare("update table set f1=? where f2=? and f3=?")
st.execute(f1, f2, f3)
st.close
これを行うことで他の影響があるかどうかはわかりません(接続が開かれたままになっているなど)。実際のクエリ以外に何を行っているのか、通常の更新のRailsコードをトレースしてみたいと思います。
プリペアドクエリを使用すると、データベースでわずかな時間を節約できますが、これを100万回連続で行わない限り、おそらく通常のRuby置換で更新を構築する方がよいでしょう、たとえば
ActiveRecord::Base.connection.execute("update table set f1=#{ActiveRecord::Base.sanitize(f1)}")
を使うか、コメント欄にあるようなActiveRecordを使うかです。
関連
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
-
[解決済み] Railsの生のSQLの例
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】bcrypt LoadError: Cannot load such file
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] rails/rubyでgroup_byを使用する。