如果您正在寻找完整的Phoenix
支持, Rummage.Phoenix
使用Rummage.Ecto
并向其添加HTML
和Controller
支持。您可以点击此处查看Rummage.Phoenix
请参阅变更日志以了解版本特定的更改
Rummage.Ecto
是一个轻量级但功能强大的框架,可用于通过搜索、排序和分页操作来更改Ecto
查询。
它通过使用Hooks
来完成上述操作,Hooks 是实现Rummage.Ecto.Hook
行为的模块。每个操作: Search
、 Sort
和Paginate
都在Rummage
中定义了它们的钩子。通过这样做, Rummage
是完全可配置的。
例如,如果您不喜欢Rummage
的其中一个钩子,但喜欢另外两个,则可以将Rummage
配置为不使用它并编写自己的自定义钩子。
注意: Rummage
不像Ransack
,而且它也不打算像Ransack
那样。它不定义基于搜索参数的函数。如果您想要类似的功能,您可以随时将Rummage
配置为使用该模型的Search
模块。这就是 Rummage 变得可配置的原因。
要查看rummage
的示例用法,请检查此存储库。
该软件包以十六进制形式提供,可以安装为:
将rummage_ecto
添加到mix.exs
中的依赖项列表中:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
)并实现Rummage.Ecto.Hook
行为的回调。每个可以转换查询的 ecto 操作都由Hook
定义。 Hooks 有run/2
函数,使用它可以转换Ecto.Queryable
变量,并有format_params/3
函数,使用它可以转换通过rummage_ecto
传递给它们的参数注意:这是可选的。如果未提供配置, Rummage
将使用默认挂钩和AppName.Repo
作为存储库
如果您想覆盖任何Rummage
默认挂钩,请将rummage_ecto
配置添加到dev.exs
中的配置列表中:
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 的分页)添加到config.exs
中的rummage_ecto
配置中: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
与任何Ecto
模型一起使用。Rummage
的任何默认挂钩,请将应用程序的CustomHook
以及所需的操作添加到config.exs
中的rummage_ecto
配置中: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
与具有多个Repo
的应用程序一起使用时,或者需要为每个模型配置Repo
时,可以将其与对Rummage.Ecto
调用一起传递。这会覆盖配置中设置的默认存储库: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
与Product
模型一起使用,该模型位于与默认仓库不同的Repo
中。 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
params
: search
、 sort
和/或paginate
。它不需要拥有所有的钥匙,或者任何与此相关的钥匙。如果传递了无效的密钥,它们不会改变翻找中的任何操作。这是Rummage
参数的示例: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}