0

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

假设我有一个tags在 model 上调用的序列化 Array 属性Post,并且我想找到posts该属性中包含 3 个以上项目的所有内容。

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

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

如果 ActiveRecord 中有解决方案,那将是一个很大的好处。

4

1 回答 1

4

首先,正如@mu 所评论的那样太短了,这里的答案是,当您需要查询该属性时不要使用序列化。再次参考该答案,您可以尝试这样的事情,

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

PS 未测试。即使它有效,似乎也非常低效。

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

Post.joins(:tags).having('count(tags.id) > 3').group('posts.id')
于 2017-05-20T18:09:58.113 回答