2012-04-01 81 views
3

假设我有用户数据存储阵列宠爱于字符串数据类型Rails的活动记录查询,系列化阵列

[ 
    #<User id: 1, name: "John", pets: "---\n- cat\n- dog\n- bunny\n- ''\n">, 
    #<User id: 2, name: "Pete", pets: "---\n- dog\n- bunny\n- ''\n">, 
    #<User id: 3, name: "Jack", pets: "---\n- cat\n- ''\n">, 
    #<User id: 4, name: "Kurt", pets: "---\n- cat\n- bunny\n- ''\n"> 
] 

我能得到的是有一只猫的所有用户?也许像User.find_all_by...User.where(....)或返回作为关系的东西?所以我可以订购积极的记录查询。

我知道我能得到具有猫的所有用户

User.all.select{|s| YAML.load(s.pets).include?'cat'} 

,但它转换成数组,不能主动记录查询订购。

thx帮助。

+0

检查本文 http://stackoverflow.com/questions/9814622/searching-serialized-data-using-active-record – hiphapis 2015-04-28 07:46:25

回答

1

您需要规范化数据,添加宠物模型并设置这些模型之间的has_and_belongs_to_many关联。

+0

出于某种原因,我避免再添加一种模型。如果没有更好的解决方案,对我来说没问题。 thx – raymondralibi 2012-04-01 08:54:21

3

您可以使用简单的SQL来查看'cat'是否出现在序列化列中。

User.where('pets LIKE "%cat%"').all

+2

它也将检索“鲶鱼” – raymondralibi 2012-04-01 09:14:51

+0

好点 - 然后做User.where('宠物LIKE“%cat \\ n%”')。all – frontendbeauty 2012-04-01 09:28:09