我需要在我的rails应用程序中找到一些数据,首先我在rails模型中搜索所有数据,然后通过一些字段(从excel文件获取)我需要在我的数组中找到,但是找到像sql一样的%%,所以不具体,但是像sql中的%%。如何在红宝石中做到这一点?
@suppliers = Supplier.find(:all)
supplier = @suppliers.find{|item| item['SUP_BRAND']=="*"+row[13]+"*"}
我做了类似的事,但那个坏主意,是不是更好的方式?
答案 0 :(得分:1)
如果我理解正确,你要做的就是部分匹配,对吗?也许使用正则表达式是正确的方法吗?试试这个:
... item['SUP_BRAND'] =~ /row[13]/ ...
这将在字符串row[13]
中查找item['SUP_BRAND']
中包含的文本。尝试使用Rubular来使用正则表达式。
答案 1 :(得分:1)
看起来你正在使用ActiveRecord。您应该只使用内置查询:
Supplier.where("SUP_BRAND like ?", "%#{row[13]}")
答案 2 :(得分:1)
这应该做你想要的技巧。我们与Regexp
匹配,.*
在开头和结尾处由%
构建,与SQL中的row[13]
相同,并在它们之间放置@suppliers = Supplier.find(:all)
supplier = @suppliers.find{|item| item['SUP_BRAND'] =~ Regexp.new(".*#{row[13]}.*") }
值:< / p>
item['SUP_BRAND'] =~ /.*#{row[13]}.*/
<强>更新强>
我刚检查过“regexp”语法或者你怎么称呼它,在这种情况下也会起作用:
{{1}}
答案 3 :(得分: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写。