2017-07-26 47 views
0

项目数据库:如何在rails 3中获得完全匹配的记录?

=> [#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]>, 
    #<Item id: 2, item_collection: [:LAPTOPANDKEYBOARD, :DISK, :SCREEN]>] 

下面的查询会给我两个记录(包括笔记本电脑和LAPTOPANDKEYBOARD)。

Item.where("item_collection like ?", "%LAPTOP%") 

=> [#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]>, 
    #<Item id: 2, item_collection: [:LAPTOPANDKEYBOARD, :DISK, :SCREEN]>] 

但我只想要只有LAPTOP的记录。

#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]> 

回答

1

序列化阵列,在每个项目的末尾添加\n,所以你可以试试这个:

Item.where("item_collection LIKE ?", "%LAPTOP\n%") 

另一种选择是获取所有数据,然后用select过滤它,像这样:

Item.all.select { |item| item.item_collection.include?(:LAPTOP) } 
+0

这将返回我空数组[]。 – Kavincat

+0

@Kavincat对不起,我错过了你正在使用序列化字段;检查更新的答案。 – Gerry

+0

@Kavincat经过一些测试,我想我想出了如何用sql来做到这一点;检查更新的答案(再次)。 – Gerry