2008-11-15 53 views
2

有条件地建立了一个名为范围我使用Ryan Bates的优秀scope_builder有条件地建立一个新的命名范围在活动记录模型的search()方法来使用。使用scope_builder在活动记录模型搜索()方法

的例子文档显示,你可以做类似如下:

# in product model 
    def self.search(options) 
    scope_builder do |builder| 
     builder.released.visible 
     builder.cheap if options[:cheap] 
    end 
    end 

但是,当我包括上述代码的相关版本在我的模型,并调用搜索(),还有一些选项过去了,什么我返回的是ScopeBuilder :: Builder的一个实例,而不是使用我通过的选项来执行链式命名范围的结果,这是我所期望的。

我的问题是:我如何得到执行生成器(选件)的结果,而不是制造商的一个实例?

回答

2

看起来scope_builder块是designed以返回范围构建器实例,因此您必须从实例中获取结果。

尝试在实例上使用.all来获取结果。比如像:

@results = Product.search().all 

his tests,它看起来像这应该工作(第47行:“应该是能够建立范围,块”)。

+0

是的,这完全有效。谢谢!我应该看到测试。伟大的思想。 – 2008-11-16 15:07:15