如果您正在尋找完整的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 }
}