基于属性大小的查询

Query based on attribute's size

我想知道是否可以在 Rails 5 中对给定长度的属性进行 where 查询?

假设我在模型 Post 上有一个名为 tags 的序列化数组属性,我想找到该属性中包含超过 3 个项目的所有 posts

我会设想它看起来像这样:

Post.where('tags.size > ?', 3)

如果 ActiveRecord 中有针对此问题的解决方案,那就太好了。

首先,@mu的评论太短了,答案here当你需要查询那个属性时不要使用序列化。 再次参考那个答案,你可以这样试试,

Post.all.select { |post| post.tags.length > 3 }

P.S。未经测试。即使有效,似乎也很低效。

如果您打算打开并创建一个名为 Tag 的关联模型(当然更好),您可以执行类似

的操作
Post.joins(:tags).having('count(tags.id) > 3').group('posts.id')