如何实现model.where {| m |的等价物m.arr.include? X }

时间:2017-07-27 13:51:38

标签: ruby-on-rails

所以,我意识到Rails不支持将块传递给模型上的函数。我应该如何检索具有包含某个给定元素的数组属性的所有对象?

1 个答案:

答案 0 :(得分:0)

where方法的目的是为ActiveRecord生成的SQL查询添加WHERE子句 - 它不对结果执行任何过滤:

Post.                        # initializes query:  SELECT * FROM `posts`
  where(author_id: 42).      # adds:  WHERE `posts`.`author_id` = 42
  to_a                       # <-- it's only here that the query is executed

如果您必须使用块过滤结果集,则必须首先执行查询 以在数组中获取结果,然后使用{{1过滤该数组的方法:

select

显然,如果你有很多记录,这将是非常慢,因为你的应用程序必须从数据库中获取每个记录,反序列化它们的数组属性并检查每个记录的过滤器标准。

文档链接: