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]字符串中的文本item['SUP_BRAND']。尝试使用Rubular来玩转正则表达式。

于 2012-08-27T14:58:10.113 回答
1

看起来您正在使用 ActiveRecord。您应该只使用内置查询:

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

这应该可以达到您想要的效果。我们正在匹配从开头和结尾Regexp构造的,这与SQL 中的相同,并在它们之间放置值:.*%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 回答
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 回答