需求是比如现在的模型:
class Port < ActiveRecord::Base
serialize :locales
end
其中的locales字段会包含比如 %w(zh en)这样多个字符串。
现在就没研究出来如何可以按照其中的内容进行查询,比如
ports = Port.all.select { |p| p.locales.include? "zh" }
这种的查询需求呢?
如果你的数据量不多,可以用位操作来处理:
zh => 1
en => 2
jp => 4
Post.create(:locales => 1 + 2) # zh, en
Post.create(:locales => 1 + 4) # zh, jp
Post.create(:locales => 2 + 4) # en, jp
Pos.where("locales & 1 > 0") #查询locale 为 zh
Pos.where("locales & 5 > 0") #查询locale 包含 zh或者jp
缺点是无法利用 locales 上的索引,数据量大的话,还是另外建立关联一个表来查询更加方便。
=======编辑分割线======= #5 楼 @_kaichen 已经提供一个 gem 来封装了我说的查询和创建,赞。