Rails活动记录查询,序列化数组

时间:2012-04-01 08:20:27

标签: ruby-on-rails yaml

假设我拥有以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'}

,但它转换为无法使用活动记录查询进行排序的数组。

这是帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用简单的SQL来查看序列化列中是否显示“cat”。

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

答案 1 :(得分:1)

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