Jika Anda mencari dukungan penuh Phoenix
, Rummage.Phoenix
menggunakan Rummage.Ecto
dan menambahkan dukungan HTML
dan Controller
ke dalamnya. Anda dapat memeriksa Rummage.Phoenix
dengan mengklik di sini
Silakan lihat CHANGELOG untuk perubahan spesifik versi
Rummage.Ecto
adalah kerangka kerja yang ringan namun kuat yang dapat digunakan untuk mengubah kueri Ecto
dengan operasi Penelusuran, Pengurutan, dan Paginasi.
Ia menyelesaikan operasi di atas dengan menggunakan Hooks
, yang merupakan modul yang mengimplementasikan perilaku Rummage.Ecto.Hook
. Setiap operasi: Search
, Sort
dan Paginate
memiliki kaitannya yang ditentukan di Rummage
. Dengan melakukan ini, Rummage
sepenuhnya dapat dikonfigurasi.
Misalnya, jika Anda tidak menyukai salah satu hook Rummage
, namun menyukai dua hook lainnya, Anda dapat mengonfigurasi Rummage
agar tidak menggunakannya dan menulis hook kustom Anda sendiri.
CATATAN: Rummage
tidak seperti Ransack
, dan tidak dimaksudkan untuk menjadi seperti Ransack
. Itu tidak mendefinisikan fungsi berdasarkan parameter pencarian. Jika Anda ingin memiliki sesuatu seperti itu, Anda selalu dapat mengonfigurasi Rummage
untuk menggunakan modul Search
untuk model tersebut. Inilah sebabnya Rummage dibuat dapat dikonfigurasi.
Untuk melihat contoh penggunaan rummage
, periksa repositori ini.
Paket ini tersedia dalam Hex, dan dapat diinstal sebagai:
Tambahkan rummage_ecto
ke daftar dependensi Anda di mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) dan mengimplementasikan callback untuk perilaku Rummage.Ecto.Hook
. Setiap operasi ecto yang dapat mengubah kueri ditentukan oleh Hook
. Hooks memiliki fungsi run/2
yang dapat digunakan untuk mengubah variabel Ecto.Queryable
dan memiliki fungsi format_params/3
yang dapat digunakan untuk mengubah parameter yang diteruskan ke mereka melalui rummage_ecto
CATATAN: Ini Opsional. Jika tidak ada konfigurasi yang disediakan, Rummage
akan menggunakan hook default dan AppName.Repo
sebagai repo
Jika Anda ingin mengganti salah satu kait default Rummage
, tambahkan konfigurasi rummage_ecto
ke daftar konfigurasi Anda di dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Untuk mengonfigurasi repo:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Opsi konfigurasi lainnya adalah: repo
, sort
, paginate
, per_page
Rummage.Ecto
dapat dikonfigurasi secara global dengan nilai per_page
(yang dapat diganti untuk suatu model). Jika Anda ingin mengatur per_page
berbeda untuk model yang berbeda, tambahkan ke file model.exs
saat menggunakan Rummage.Ecto
seperti yang ditunjukkan di Bagian Penggunaan Lanjutan.
Rummage.Ecto
hadir dengan banyak fitur canggih yang langsung tersedia, tanpa menulis banyak kode.
Berikut adalah cara Rummage.Ecto
dapat digunakan:
Repo
aplikasi Anda dan per_page
yang diinginkan (jika menggunakan Pagination Rummage) ke konfigurasi rummage_ecto
di config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
dengan model Ecto
apa pun.Rummage
dengan hook khusus Anda, tambahkan CustomHook
aplikasi Anda dengan operasi yang diinginkan ke konfigurasi rummage_ecto
di config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
dengan aplikasi yang memiliki beberapa Repo
, atau saat ada kebutuhan untuk mengonfigurasi Repo
per model, hal ini dapat diteruskan bersamaan dengan panggilan ke Rummage.Ecto
. Ini mengesampingkan repo default yang diatur dalam konfigurasi: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
dengan model Product
yang berada di Repo
berbeda dari yang default. 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
dengan kunci: search
, sort
dan/atau paginate
. Tidak perlu memiliki semua kunci, atau kunci apa pun. Jika kunci yang tidak valid diberikan, kunci tersebut tidak akan mengubah operasi apa pun dalam penggeledahan. Berikut ini contoh parameter Rummage
: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}