หากคุณกำลังมองหาการสนับสนุน Phoenix
เต็มรูป Rummage.Phoenix
จะใช้ Rummage.Ecto
และเพิ่มการรองรับ HTML
และ Controller
เข้าไป คุณสามารถตรวจสอบ Rummage.Phoenix
ได้โดยคลิกที่นี่
โปรดดู CHANGELOG สำหรับการเปลี่ยนแปลงเฉพาะเวอร์ชัน
Rummage.Ecto
เป็นเฟรมเวิร์กที่มีน้ำหนักเบา แต่ทรงพลังที่สามารถใช้เพื่อแก้ไขคิวรี Ecto
ด้วยการดำเนินการค้นหา การเรียงลำดับ และการแบ่งหน้า
มันทำให้การดำเนินการข้างต้นสำเร็จได้โดยใช้ Hooks
ซึ่งเป็นโมดูลที่ใช้พฤติกรรม Rummage.Ecto.Hook
การดำเนินการแต่ละครั้ง: Search
, Sort
และ Paginate
มี hooks ที่กำหนดไว้ใน Rummage
ด้วยการทำเช่นนี้ Rummage
จึงสามารถกำหนดค่าได้อย่างสมบูรณ์
ตัวอย่างเช่น หากคุณไม่ชอบหนึ่งใน hooks ของ Rummage
แต่คุณชอบอีกสองอัน คุณสามารถกำหนดค่า Rummage
ไม่ให้ใช้งานและเขียน hook ที่คุณกำหนดเองได้
หมายเหตุ: 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
การดำเนินการ ecto แต่ละรายการซึ่งสามารถแปลงแบบสอบถามได้ถูกกำหนดโดย Hook
Hooks มีฟังก์ชัน run/2
ซึ่งพวกเขาสามารถแปลงตัวแปร Ecto.Queryable
และมีฟังก์ชัน format_params/3
ซึ่งพวกเขาสามารถแปลงพารามิเตอร์ที่ส่งผ่านให้พวกเขาผ่าน rummage_ecto
หมายเหตุ: นี่เป็นทางเลือก หากไม่มีการกำหนดค่า Rummage
จะใช้ hooks เริ่มต้นและ AppName.Repo
เป็น repo
หากคุณต้องการแทนที่ hooks เริ่มต้นของ Rummage
ให้เพิ่ม rummage_ecto
config ลงในรายการการกำหนดค่าของคุณใน dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
สำหรับการกำหนดค่า repo:
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
ที่ต้องการ (หากใช้การแบ่งหน้าของ Rummage) ให้กับการกำหนดค่า rummage_ecto
ใน config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
กับ Ecto
รุ่นใดก็ได้Rummage
ด้วย hook ที่คุณกำหนดเอง ให้เพิ่ม 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
ได้ สิ่งนี้จะแทนที่ชุด repo เริ่มต้นในการกำหนดค่า: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
กับ Product
model ซึ่งอยู่ใน 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 }
}