【发布时间】:2017-10-20 16:31:24
【问题描述】:
我想知道在 Rails 5 中是否可以对给定长度的属性进行where 查询?
假设我在模型 Post 上有一个名为 tags 的序列化 Array 属性,我想查找该属性中包含 3 个以上项目的所有 posts。
我会设想它看起来像这样:
Post.where('tags.size > ?', 3)
如果 ActiveRecord 中有解决方案,那将是一个很大的好处。
【问题讨论】:
-
一个序列化的数组将只是数据库中一个不透明的 YAML 块,数据库不知道如何处理该 YAML,所以你不走运。在单独的列中手动跟踪
tags的大小,停止使用serialize(毕竟这是一个陷阱)并使用单独的关联表,或者切换到支持数组的数据库(例如PostgreSQL)。我再说一遍:serialize是一个陷阱,可能会给你带来短期收益,但几乎总是会在你的脸上炸开。 -
这是合理的建议,谢谢。
标签: ruby-on-rails activerecord rails-activerecord ruby-on-rails-5 ruby-on-rails-5.1