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

StackOverflow https://stackoverflow.com/questions/292922

  •  08-07-2019
  •  | 
  •  

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

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

有帮助吗?

解决方案

看起来scope_builder块是设计以返回范围-builder实例,因此您必须从实例中获取结果。

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

@results = Product.search().all

他的测试,它看起来这应该工作(第47行:<!>;应该能够在块<!>中建立范围;)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top