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