0

キャビネットのビューがあり、キャビネットと同じデータ センターと場所を持つ RFID タグのリストを表示したいと考えています。条件を満たすすべての FRID レコードを検索するコマンドの構文がわかりません。RFID ディスプレイは、キャビネット ビュー フォルダの一部として設計されています。このコマンドは、rfid.data_center = Cabinet.data_center AND rfid.position = Cabinet.cabinet_name のレコードを取得する必要があります。その中の文字列をハードコーディングすると機能します。コードは次のとおりです。

<% @cabinet.devices.order(:name).each do |device| %>
    <% @rfid = Rfid.where("(@rfid.data_center_name = '%#{params[:data_center]}%') AND (@rfid.position = '%#{params[:cabinet_name]}%')").uniq %>
4

1 に答える 1

1

上記のものは SQL インジェクションに対して脆弱です。文字列を自分でバインドする代わりに、パラメーター バインドを使用する必要があります。これを行う 1 つの方法を次に示します。

Rfid.where(:data_center_name => params[:data_center], :position => params[:cabinet_name]).uniq

上記の内容を考えると、次のようなものが必要になる場合があります。

<% @cabinet.devices.order(:name).each do |device| %>
  <% @rfids = Rfid.where(:data_center_name => device.cabinet.datacenter, :position => device.cabinet.cabinet_name).uniq %>

これを記述するより良い方法がありますが、私たちはあなたの関係を見て、あなたが何をしようとしているのかをよりよく理解する必要があります.

于 2013-03-11T17:05:20.033 に答える