我的CSV有一个名为name
的字符串列,它有" 3个月面食"。
我想将其映射到现有的数据库表。 DB记录将其保存为" 3个月意大利面"。
如果我尝试Food.where(name: row['name'])
,它就会变空。因为它正在做一个直接字符串来比较" 3个月意大利面"和" 3个月意大利面"。
我也试过这个
Food.where('name LIKE ?', '%' + "3 months pasta" + '%')
除非我大写" p"哪个不起作用,我该怎样做才能让两端的字符串匹配?我想做一个row['name'].parameterize.underscore
来获得单个案例和单一样式,然后从数据库中做同样的事情并匹配它们。问题是这样做可能会转换所有名称,然后进行比较。
我能做些什么来实现这个目标吗?
答案 0 :(得分:2)
尝试
Food.where("lower(name) = ?", row['name'].downcase)
答案 1 :(得分:1)
虽然@Ursus的答案完全正确,但我会对DB进行本机不区分大小写搜索:
Food.where('name = ? COLLATE utf8_general_ci', "3 months pasta")
排序规则名称中的 ci
代表“不区分大小写。”