【问题标题】:Filter relations similar to any? in Rails过滤关系类似于任何?在 Rails 中
【发布时间】:2020-06-20 07:43:27
【问题描述】:

我有一个拥有许多宠物的 Person 模型。 Pet模型中有一个方法叫is_parent? 如何根据宠物是否已经有孩子来过滤一个人的宠物? 我想要类似的东西

person = Person.first
person.pets.any? { |pet| pet.is_parent? } # returns true

有什么我可以称之为 person.pets.filter { |pet| 的东西吗? pet.is_parent? } 并返回所有有孩子的宠物?

谢谢

【问题讨论】:

  • is_parent? 是如何定义的?我问是因为如果is_parent? 是一个实例方法,你需要遍历所有宠物才能检查它们,也许有更好的方法来做到这一点,只使用 SQL。

标签: ruby-on-rails rails-activerecord


【解决方案1】:

你可以像这样使用select method from Ruby's Enumerable模块

person.pets.select { |pet| pet.is_parent? }

也可以写成

person.pets.select(&:is_parent?)

话虽如此,对于大量记录,通常最好在数据库端进行过滤。

【讨论】:

  • 在数据库端过滤是什么意思?我该怎么做呢
  • 我的意思是 .select 是用 Ruby 代码完成的,如果你有很多记录,它会变慢。如果您没有注意到您的应用程序有任何缓慢或滞后,请不要担心,您可以随时进行优化。
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多