2013-04-06 18 views

答えて

49

はこの選択の例を試してみてください..:あなたはスピードのためのカスタムクエリを行っている場合のRails 4で

query = "select ...." 
results = ActiveRecord::Base.connection.execute(query) 
+1

コントローラからこれを呼び出すとき、これは非推奨です。 # – Vortico

+1

これは、コントローラーでデータベースに直接アクセスするのではなく、モデルをデータベースと対話させる必要があるからです。 – ant

+0

@antトランザクションを開くか、接続を開くかどうかを指定する必要があります。カスタムSQLクエリの実行には十分でしょうか? [pastie example](http://pastie.org/10111824) – gaussblurinc

10

(おそらく以前のバージョンと同様)、あなたはに:skip_logging引数を追加することができますログへの書き込みを避ける:

query = "SELECT ..." 
results = MyModel.connection.execute(query, :skip_logging) 

(注:私は正しくソースを読んでいる場合は、これはPostgreSQLでは成り立たない可能性があります。)

+0

SQLインジェクションを防ぐにはどうしたらいいですか? – yeyo

+5

(これは既に回答がない限り)それだけではすばらしい質問をするでしょう - あなたは同意しませんか? –

+0

はい、私はあなたが正しいと信じています。 – yeyo

26

ただ、生の私の10ペンスを追加しますModel.connection.executeを使用したクエリはActiveRecordモデルを返しません - 生データセットを返します。

以下はActiveRecordのモデルを返します。

MyModel.find_by_sql(query) 

編集を:あなたが選択を実行しているもちろん仮定します。

関連する問題