所以这有效并获取我需要的数据:

  def has_function
    services = []
    Service.find_each do |s|
      if s.functions.size > 0
        services << s
      end
    end
    return services
  end

但是,该方法返回一个数组,我打算将它链接到其他地方:
Service.has_function.visible.includes(:layer)
undefined method `where' for #<Array:0x007faad487a970>

我怎样才能检查这个并返回一些可链接的东西?

最佳答案

您会希望在一个连接中演奏爵士乐,以便所有这些都保留在 ActiveRecord 中。另外...这会快得多,因为它是一个单一的 SQL 查询。只要确保你有适当的索引。

Service.joins(:functions).visible.includes(:layer)

如果您想检查任何不存在的东西,请说计数 > 1;你必须做团体/拥有。
Service.
  joins(:functions).
  select('services.*, count(functions.id) as function_count').
  group('services.id').
  having('function_count > 2')

关于ruby-on-rails - has_many.size 大于 0 的 Rails?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26396119/

10-13 04:49