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 のインスタンスであり、チェーンされた名前付きスコープをオプションで実行した結果ではありません。私は合格しました、それは私が期待するものです。

私の質問は次のとおりです。ビルダーのインスタンスではなく、ビルダー(オプション)を実行した結果を取得するにはどうすればよいですか?

4

1 に答える 1

2

scope_builder ブロックはscope-builder インスタンスを返すように設計されているように見えるため、インスタンスから結果を取得する必要があります。

インスタンスで .all を使用して結果を取得してみてください。たとえば、次のようなものです。

@results = Product.search().all

彼のテストから、これはうまくいくように見えます (47 行目: 「ブロックでスコープを構築できるはずです」)。

于 2008-11-16T03:30:50.677 に答える