Ruby on rails Rails3:如何过滤“ActiveRecord::Relation”项?
products是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: 让我们尝试为您提供更广泛的解决方案: 首先,声明您的筛选函
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有何关系。你建议将我的_过滤器放在什么类中?我刚刚向你提出了一些实现方案