Phoenix
完全なサポートをお探しの場合、 Rummage.Phoenix
Rummage.Ecto
を使用し、それにHTML
およびController
サポートを追加します。ここをクリックしてRummage.Phoenix
チェックできます
バージョン固有の変更については、CHANGELOG を参照してください。
Rummage.Ecto
は軽量ですが強力なフレームワークで、検索、並べ替え、ページネーションの操作でEcto
クエリを変更するために使用できます。
上記の操作は、 Rummage.Ecto.Hook
動作を実装するモジュールであるHooks
使用して実行されます。 Search
、 Sort
、 Paginate
の各操作には、 Rummage
で定義されたフックがあります。こうすることで、 Rummage
完全に構成できるようになります。
たとえば、 Rummage
のフックの 1 つは気に入らないが、他の 2 つは気に入っている場合、それを使用しないようにRummage
構成し、独自のカスタム フックを作成できます。
注: Rummage
Ransack
とは異なりますし、 Ransack
のようになろうとするつもりもありません。検索パラメータに基づいて関数を定義しません。そのようなものが必要な場合は、そのモデルのSearch
モジュールを使用するようにRummage
いつでも設定できます。これが、Rummag が構成可能になった理由です。
rummage
の使用例を確認するには、このリポジトリを確認してください。
このパッケージは 16 進数で利用でき、次のようにインストールできます。
mix.exs
の依存関係のリストにrummage_ecto
を追加します。
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
を使用する) であり、 Rummage.Ecto.Hook
動作のコールバックを実装します。クエリを変換できる各 ecto 操作は、 Hook
によって定義されます。フックには、 Ecto.Queryable
変数を変換できるrun/2
関数と、 rummage_ecto
を通じて渡されたパラメータを変換できるformat_params/3
関数があります。 注: これはオプションです。構成が提供されていない場合、 Rummage
デフォルトのフックとAppName.Repo
をリポジトリとして使用します。
Rummage
デフォルトのフックをオーバーライドする場合は、 dev.exs
の構成リストにrummage_ecto
config を追加します。
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
リポジトリを構成するには:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
他の構成オプションは次のとおりです: repo
、 sort
、 paginate
、 per_page
Rummage.Ecto
、 per_page
値を使用してグローバルに構成できます (モデルごとにオーバーライドできます)。モデルごとに異なるper_page
設定したい場合は、「高度な使用法」セクションに示すように、 Rummage.Ecto
使用するときにそれをmodel.exs
ファイルに追加します。
Rummage.Ecto
には、大量のコードを記述しなくても、すぐに利用できる強力な機能が多数付属しています。
Rummage.Ecto
使用方法は次のとおりです。
Repo
と目的のper_page
(Rummage の Pagination を使用している場合) をconfig.exs
のrummage_ecto
設定に追加します。 config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Ecto
モデルでもRummage.Ecto
使用できるはずです。Rummage
のデフォルトのフックをカスタム フックでオーバーライドしたい場合は、必要な操作を備えたアプリのCustomHook
config.exs
のrummage_ecto
設定に追加します。 config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Repo
を持つアプリでRummage.Ecto
を使用する場合、またはモデルごとにRepo
構成する必要がある場合は、 Rummage.Ecto
への呼び出しと一緒に渡すことができます。これは、構成で設定されたデフォルトのリポジトリをオーバーライドします。 { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Repo
にあるProduct
モデルでRummage.Ecto
使用できるはずです。 rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}
{ queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage )
products = queryable
|> Product . another_operation # <-- Since `Rummage` is Ecto, we can pipe the result queryable into another queryable operation.
|> Repo . all
search
、 sort
、および/またはpaginate
を使用してparams
に応答します。すべてのキーが必要なわけではありませんし、さらに言えば、任意のキーが必要なわけでもありません。無効なキーが渡された場合、rummage の操作は変更されません。 Rummage
パラメータの例を次に示します。 rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}