假设我拥有以String数据类型
存储pet数组的Users数据[
#<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'}
,但它转换为无法使用活动记录查询进行排序的数组。
这是帮助。答案 0 :(得分:3)
您可以使用简单的SQL来查看序列化列中是否显示“cat”。
User.where('pets LIKE "%cat%"').all
答案 1 :(得分:1)
您需要规范化数据,添加宠物模型并在theese模型之间设置has_and_belongs_to_many关联。