我正在尝试对序列化列进行简单查询,您如何做到这一点?

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)
 => []

最佳答案

基本上,你不能。 #serialize的缺点是您绕过了数据库的本机抽象。您几乎只能加载和保存数据。

也就是说,将应用程序减慢到爬网的一种非常好的方法是:

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

故事的寓意:不要对需要查询的任何数据使用#serialize。

关于ruby-on-rails - 使用事件记录搜索序列化数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9814622/

10-09 12:40