【发布时间】:2017-08-01 03:32:01
【问题描述】:
我的模型 course.rb 与 pre_courses 是一个数组。
class Course < ActiveRecord::Base
serialize :pre_courses, Array
end
现在我想通过 Activerecord 或原始 SQL(我正在使用 MySQL)检查是否存在 course 是 pre_course,例如 Course.where("pre_courses INCLUDEs self.id")。
有什么办法吗?
【问题讨论】:
-
试试
Course.where(" '#{self.id}' = ANY (pre_courses)") -
试试这个
Course.includes(:pre_courses).where.not(pre_courses: {id: nil} ")或Course.includes(:pre_courses).where.not(pre_courses: {id: nil} ").find(self.id) -
你的第一步应该是用一个单独的表替换
serialize。 -
带有
LIKE的查询对于很多列往往非常慢并且难以优化。一旦我需要通过带有LIKE的序列化数据列进行查询,我会考虑另一种数据结构:可能是JSON 或规范化表结构。
标签: mysql ruby-on-rails ruby activerecord