إذا كنت تبحث عن دعم كامل Phoenix
، Rummage.Phoenix
يستخدم Rummage.Ecto
ويضيف دعم HTML
ووحدة Controller
إليه. يمكنك التحقق من Rummage.Phoenix
بالضغط هنا
يرجى الرجوع إلى سجل التغيير للتعرف على التغييرات الخاصة بالإصدار
Rummage.Ecto
هو إطار عمل خفيف الوزن ولكنه قوي يمكن استخدامه لتغيير استعلامات Ecto
من خلال عمليات البحث والفرز والصفحات.
إنه ينجز العمليات المذكورة أعلاه باستخدام Hooks
، وهي وحدات نمطية تنفذ سلوك Rummage.Ecto.Hook
. كل عملية: Search
و Sort
و Paginate
لها خطافات محددة في Rummage
. ومن خلال القيام بذلك، يصبح Rummage
قابلاً للتكوين بالكامل.
على سبيل المثال، إذا كنت لا تحب أحد الخطافات في Rummage
، ولكنك تحب الخطافين الآخرين، فيمكنك تكوين Rummage
بحيث لا تستخدمه وكتابة الخطاف المخصص الخاص بك.
ملاحظة: Rummage
ليس مثل Ransack
، ولا ينوي أن يكون مثل Ransack
. ولا يحدد الوظائف بناءً على معلمات البحث. إذا كنت ترغب في الحصول على شيء من هذا القبيل، فيمكنك دائمًا تكوين Rummage
لاستخدام وحدة Search
الخاصة بك لهذا النموذج. هذا هو السبب وراء جعل Rummage قابلاً للتكوين.
لرؤية مثال لاستخدام rummage
، تحقق من هذا المستودع.
هذه الحزمة متوفرة في Hex، ويمكن تثبيتها على النحو التالي:
أضف rummage_ecto
إلى قائمة التبعيات الخاصة بك في mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) وتقوم بتنفيذ عمليات رد اتصال لسلوك Rummage.Ecto.Hook
. يتم تعريف كل عملية خارجية يمكنها تحويل الاستعلام بواسطة Hook
. تحتوي الخطافات على وظيفة 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
مختلفة لنماذج مختلفة، قم بإضافتها إلى ملف model.exs
أثناء استخدام Rummage.Ecto
كما هو موضح في قسم الاستخدام المتقدم.
يأتي Rummage.Ecto
مزودًا بالكثير من الميزات القوية المتوفرة على الفور، دون الحاجة إلى كتابة الكثير من التعليمات البرمجية.
فيما يلي الطرق التي يمكن من خلالها استخدام Rummage.Ecto
:
Repo
لتطبيقك و per_page
المطلوب (إذا كنت تستخدم Pagination الخاص بـ Rummage) إلى تكوين rummage_ecto
في config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
مع أي طراز من طراز Ecto
.Rummage
الافتراضية باستخدام خطافك المخصص، أضف CustomHook
لتطبيقك مع العملية المطلوبة إلى تكوين rummage_ecto
في config.exs
: 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 }
}