0

そこで、すべての投稿と取得要求を処理するメインの ruby​​ ファイルに変数を設定し、ERB テンプレートを使用して実際にページを表示します。データベース ハンドラー自体を erb テンプレートに渡し、テンプレートでクエリを実行して (この例では) すべての権限を取得します。

私のメインのルビーファイルでは:

grants_main_order = "id_num"
get '/grants' do
    erb :grants, :locals => {:db=>db, :order=>grants_main_order, :message=>params[:message]}
end

erb テンプレートでは:

db = locals[:db]
getGrants = db.exec("SELECT * FROM grants ORDER BY $1", [locals[:order]])

これにより、非常にランダムな順序が生成されますが、$1 を id_num に置き換えると、正常に機能します。

これはタイピングの問題ですか?どうすればこれを修正できますか? #{locals[:order]} で文字列置換を使用すると、ファンキーな結果が得られます。

4

3 に答える 3

1

パラメータは、定数値をクエリに入れるためにあります。-節でそれらを使用することは可能で合法ですが、意味がありませんORDER BY

次のクエリを発行するとします。

SELECT first_name, last_name
  FROM people
 ORDER BY first_name

「first_name」を文字列に入れてパラメーターとして渡すと、代わりに次のようになります。

SELECT first_name, last_name
  FROM people
 ORDER BY "first_name"

違いは非常に大きいです。最後のORDER BY-clause は、各行の列の値を気にせず、すべての行が同一であるかのようにソートするようデータベースに指示します。並び順はランダムになります。

于 2013-03-23T16:36:22.513 に答える
0

シナトラにはdatamapper(http://datamapper.org/)を使用することをお勧めします。これは非常に洗練されたORMであり、構築しようとしているパラメーター化されたクエリを非常にうまく処理します。

于 2010-04-30T15:58:56.643 に答える
0

なにを調べましたかlocals[:order]?ファンキーな何かがそこにあるのかもしれません。

p locals[:order]

于 2010-04-30T18:41:09.487 に答える