我想知道 Rails 5 中是否可以where
查询给定长度的属性?
假设我有一个tags
在 model 上调用的序列化 Array 属性Post
,并且我想找到posts
该属性中包含 3 个以上项目的所有内容。
我会设想它看起来像这样:
Post.where('tags.size > ?', 3)
如果 ActiveRecord 中有解决方案,那将是一个很大的好处。
我想知道 Rails 5 中是否可以where
查询给定长度的属性?
假设我有一个tags
在 model 上调用的序列化 Array 属性Post
,并且我想找到posts
该属性中包含 3 个以上项目的所有内容。
我会设想它看起来像这样:
Post.where('tags.size > ?', 3)
如果 ActiveRecord 中有解决方案,那将是一个很大的好处。
首先,正如@mu 所评论的那样太短了,这里的答案是,当您需要查询该属性时不要使用序列化。再次参考该答案,您可以尝试这样的事情,
Post.all.select { |post| post.tags.length > 3 }
PS 未测试。即使它有效,似乎也非常低效。
如果您打算打开以创建一个名为Tag
(当然更好)的关联模型,您可以执行类似的操作
Post.joins(:tags).having('count(tags.id) > 3').group('posts.id')