2

我正在使用 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 的一个实例,而不是使用选项执行链式命名范围的结果我已经通过了,这是我所期望的。

我的问题是:如何获得执行 builder(options) 而不是构建器实例的结果?

4

1 回答 1

2

看起来 scope_builder 块旨在返回 scope-builder 实例,因此您必须从实例中获取结果。

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

@results = Product.search().all

他的测试看来,这应该可以工作(第 47 行:“应该能够在块中建立范围”)。

于 2008-11-16T03:30:50.677 回答