Ruby on rails Rails3:如何过滤“ActiveRecord::Relation”项?

Ruby on rails Rails3:如何过滤“ActiveRecord::Relation”项?,ruby-on-rails,activerecord,filter,scope,ruby-on-rails-3,Ruby On Rails,Activerecord,Filter,Scope,Ruby On Rails 3,products是ActiveRecord::Relation。我过滤一些产品,如下所示: filtered_products = my_filter(products) 在哪里 但我不能这样做,因为过滤的产品不是ActiveRecord::Relation 我应该如何重写我的_过滤器,使其返回ActiveRecord::Relation 或者,有更好的解决方案吗?我建议您将“我的过滤器”方法转换为类方法或范围,以便保留对象 编辑1: 让我们尝试为您提供更广泛的解决方案: 首先,声明您的筛选函

products是ActiveRecord::Relation。我过滤一些产品,如下所示:

filtered_products = my_filter(products)
在哪里

但我不能这样做,因为过滤的产品不是ActiveRecord::Relation

我应该如何重写我的_过滤器,使其返回ActiveRecord::Relation


或者,有更好的解决方案吗?

我建议您将“我的过滤器”方法转换为类方法或范围,以便保留对象

编辑1:

让我们尝试为您提供更广泛的解决方案:

首先,声明您的筛选函数:

def my_filter(product)
  @last_brand_id ||= nil
  @last_model_id ||= nil
  test = (product.model.brand_id != last_brand_id || product.model_id != last_model_id)
  @last_brand_id = product.model.brand_id
  @last_model_id = product.model_id
  test
end
然后获取您想要的产品:

filtered_products = products.select{|p| p if my_filter(p)}

我建议您将“my_filter”方法转换为类方法或范围,以便保留对象

编辑1:

让我们尝试为您提供更广泛的解决方案:

首先,声明您的筛选函数:

def my_filter(product)
  @last_brand_id ||= nil
  @last_model_id ||= nil
  test = (product.model.brand_id != last_brand_id || product.model_id != last_model_id)
  @last_brand_id = product.model.brand_id
  @last_model_id = product.model_id
  test
end
然后获取您想要的产品:

filtered_products = products.select{|p| p if my_filter(p)}

这完全取决于if是什么——我的意思是条件只能从数据库而不是ruby代码访问吗?我更新了这个问题。现在您可以看到if条件了。这完全取决于if是什么-我的意思是,条件是否只能从数据库而不是从ruby代码访问?我更新了这个问题。现在你可以看到if条件了。你能告诉我怎么做吗?我更新了我感到困惑的问题:“products.each do | product |”的结束语是否在正确的位置?在再次循环之前,您不更新last_brand_id和last_model_id吗?好的,我不做您的工作,但请转到第128页并阅读,我不知道它与ActiveRecord::Relation有何关系。你建议把我的过滤器放在哪一类?我刚刚向你提出了一些实现方法,你能告诉我怎么做吗?我更新了我感到困惑的问题:“products.each do | product |”的结束语是否在正确的位置?在再次循环之前,您不更新last_brand_id和last_model_id吗?好的,我不做您的工作,但请转到第128页并阅读,我不知道它与ActiveRecord::Relation有何关系。你建议将我的_过滤器放在什么类中?我刚刚向你提出了一些实现方案