使用scope_builder在Active Record模型search()方法中有条件地构建命名范围

时间:2008-11-15 19:05:47

标签: ruby-on-rails named-scope

我正在使用Ryan Bates的优秀scope_builder来有条件地构建一个新的命名范围,以便在Active Record模型的search()方法中使用。

示例文档显示您可以执行以下操作:

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

但是,当我在我的模型中包含上述代码的相关版本并调用search()并传递了一些选项时,我得到的是ScopeBuilder :: Builder的一个实例,而不是执行链式命名范围的结果我已经通过的选项,这是我所期望的。

我的问题是:如何获取执行构建器(选项)的结果而不是构建器的实例?

1 个答案:

答案 0 :(得分:2)

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

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

@results = Product.search().all

his tests开始,它看起来应该可行(第47行:“应该能够在块中构建范围”)。