搜索序列化的数据,用活动记录 [英] Searching serialized data, using active record

查看:149
本文介绍了搜索序列化的数据,用活动记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要做的序列化列的简单查询,你是怎么做到这一点?

 连载:我的code,阵列


1.9.3p125:026> MyModel.find(104)。我的code
  为MyModel负载(0.6ms)选择`mymodels`。* FROM`mymodels` WHERE`mymodels`.`id` = 104 LIMIT 1
 => [43565个,43402]
1.9.3p125:027> MyModel.find_all_by_my code([43402])
  为MyModel负荷(为0.7m​​s)选择`mymodels`。* FROM`mymodels` WHERE`mymodels`.`my code` ='[43402]
 => []
1.9.3p125:028> MyModel.find_all_by_my code(43402)
  为MyModel负载(1.2ms的)选择`mymodels`。* FROM`mymodels` WHERE`mymodels`.`my code` = 43402
 => []
1.9.3p125:029> MyModel.find_all_by_my code([43565个,43402])
  为MyModel负载(1.1ms)选择`mymodels`。* FROM`mymodels` WHERE`mymodels`.`my code` IN(43565个,43402)
 => []
 

解决方案

基本上,你不能。 #serialize的缺点是,你绕过你的数据库的原生抽象。你是pretty的很多限制在加载和保存数据。

这是说,一个非常好的方式减慢你的应用程序如蜗牛可能是:

  MyModel.all.select {| M | m.my code.include? 43402}
 

这个故事告诉我们:不要使用#serialize您需要查询上的任何数据。

I'm trying to do a simple query of a serialized column, how do you do this?

serialize :mycode, Array


1.9.3p125 :026 > MyModel.find(104).mycode
  MyModel Load (0.6ms)  SELECT `mymodels`.* FROM `mymodels` WHERE `mymodels`.`id` = 104 LIMIT 1
 => [43565, 43402] 
1.9.3p125 :027 > MyModel.find_all_by_mycode("[43402]")
  MyModel Load (0.7ms)  SELECT `mymodels`.* FROM `mymodels` WHERE `mymodels`.`mycode` = '[43402]'
 => [] 
1.9.3p125 :028 > MyModel.find_all_by_mycode(43402)
  MyModel Load (1.2ms)  SELECT `mymodels`.* FROM `mymodels` WHERE `mymodels`.`mycode` = 43402
 => [] 
1.9.3p125 :029 > MyModel.find_all_by_mycode([43565, 43402])
  MyModel Load (1.1ms)  SELECT `mymodels`.* FROM `mymodels` WHERE `mymodels`.`mycode` IN (43565, 43402)
 => [] 

解决方案

Basically, you can't. The downside of #serialize is that you're bypassing your database's native abstractions. You're pretty much limited to loading and saving the data.

That said, one very good way to slow your application to a crawl could be:

MyModel.all.select { |m| m.mycode.include? 43402 }

Moral of the story: don't use #serialize for any data you need to query on.

这篇关于搜索序列化的数据,用活动记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆