scope_builderを使用して、Active Recordモデルのsearch()メソッドで名前付きスコープを条件付きで構築します
-
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行目:"ブロック内にスコープを構築できるはずです")。
所属していません StackOverflow