Rails:如何根据返回true的方法获取用户集合

时间:2015-12-16 21:59:51

标签: ruby-on-rails

例如:

def some_boolean_method?
  # returns true or false
end

我想做这样的事情:User.where(some_boolean_method: true)。这就是我如何使用实际列进行操作,但是如何使用方法来实现呢?

2 个答案:

答案 0 :(得分:2)

你必须将它与select一起使用,因为这些方法是模型的抽象,所以这些方法在数据库中不可用。

User.where(...).select { |u| u if u.some_boolean_method }.reject(&:blank?)

或者:

User.select { |u| u if u.some_boolean_method }.reject(&:blank?)

假设方法 some_boolean_method 在用户实现中,或者至少它使用用户做出决定。

答案 1 :(得分:1)

您可以使用

User.all.select(&:some_boolean_method)

请注意,这会将所有用户从数据库加载到内存中,并仅保留some_boolean_method返回true的用户。如果您有太多用户(在这种情况下考虑使用find_each),这可能会导致问题。