0

Railsアプリでいくつかのデータを見つける必要があります。最初にRailsモデルのすべてのデータを検索し、次にいくつかのフィールド(Excelファイルから取得)を介して、配列で検索する必要がありますが、%%のようなSQLとして検索します。具体的ではありませんが、SQL の % % のようです。ルビーでこれを行う方法は?

@suppliers = Supplier.find(:all)
supplier = @suppliers.find{|item| item['SUP_BRAND']=="*"+row[13]+"*"}

私はそのようなことをしますが、その悪い考えは、より良い方法ですか?

4

4 に答える 4

1

私の理解が正しければ、あなたがしようとしているのは部分一致ですよね?おそらく、正規表現を使用するのが正しい方法でしょうか? これを試して:

... item['SUP_BRAND'] =~ /row[13]/ ...

row[13]これは、 string 内に含まれるテキストを探しますitem['SUP_BRAND']Rubularを使って正規表現をいじってみてください。

于 2012-08-27T14:58:10.113 に答える
1

これはあなたが望むトリックをするはずです。SQL と同じように最初と最後Regexpから構築されたものと照合し、それらの間に値を入れます。.*%row[13]

@suppliers = Supplier.find(:all)
supplier = @suppliers.find{|item| item['SUP_BRAND'] =~ Regexp.new(".*#{row[13]}.*") }

更新しました

この場合、「regexp」構文またはどのように呼び出すかを確認したところ、次の場合にも機能します。

item['SUP_BRAND'] =~ /.*#{row[13]}.*/
于 2012-08-27T15:12:03.073 に答える
1

ActiveRecord を使用しているようです。組み込みのクエリを使用する必要があります。

Supplier.where("SUP_BRAND like ?", "%#{row[13]}")
于 2012-08-27T15:03:38.077 に答える
0

メソッドはメソッドのfindエイリアスでありdetect、最初の項目のみを返します。一致するアイテムのコレクションを返したいと思いますか?

@suppliers = Supplier.find(:all)
supplier = @suppliers.select { |item| item['SUP_BRAND'].include?(row[13]) }

または正規表現で

supplier = @suppliers.select { |item| item['SUP_BRAND'] =~ /#{row[13]}/ }

しかし、これは非常に非効率的です。数百または数千のサプライヤーがいる場合はどうなりますか? なぜこれをそのままの ActiveRecord で記述できないのか不思議です。

于 2012-08-27T19:03:03.017 に答える