يمكن ActiveScaffold تهيئتها لإظهار نموذج بحث قبل عرض قائمة؟
-
20-08-2019 - |
سؤال
وعندما أسأل ActiveScaffold أن تبين لي قائمة طويلة جدا (على سبيل المثال قائمة من المنتجات التي تباع)، فإنه يعمل استعلام قاعدة بيانات للحصول على الصفحة الأولى من البيانات ويعرضها. إذا كانت القائمة لديها عدد قليل من العلاقات، هذا الاستعلام قد يستغرق بعض الوقت لتنفيذ (أكثر من الثانية). في معظم الوقت، وأنا غير مهتم في هذه القائمة "غير المرشحة": أول شيء أريد القيام به هو النقر على "بحث" وتتغلغل هذه القائمة
.هل هناك أي طريقة يمكنني أن أقول ActiveScaffold على لا م> لعرض قائمة غير المرشحة عندما يتم استدعاء الإجراء القائمة؟ وأود أن مجرد عرض نموذج البحث، انتظر بعض المعايير إدخالها، وفقط <م> ثم م> عرض قائمة تمت تصفيتها.
المحلول
ولقد وجدت الحل من خلال تحديد conditions_for_collection م> الأسلوب في وحدة تحكم. انه نوع من الإختراق، لكنه بسيط (3 خطوط) ويعمل:
def conditions_for_collection
params[:action]=="update_table" ? "" : "1=2"
end
وهذا هو كيف ستسير الامور: عندما تسأل عن القائمة، قائمة وحدة التحكم م> يسمى طريقة، التعامل معها من قبل ActiveScaffold. المكالمات ActiveScaffold <م> conditions_for_collection م>، وبما أن العمل هو قائمة م> (وليس <م> update_table م>)، وطريقة conditions_for_collection فوق عوائد "1 = 2"، والتي بالطبع يؤدي إلى قائمة فارغة.
ويمكن للمستخدم النقر على زر "بحث"، وإطلاق عملية بحث. وهذا يدعو لل<م> update_table م> العمل، والمكالمات ActiveScaffold مرة أخرى <م> conditions_for_collection م>، الذي يعود هذه المرة "" (أي مرشح)، لذلك يتم البحث اللائحة بأكملها.
وانها ليست جميلة حقا، ولكن لا وظيفة.
نصائح أخرى
وربما كنت بحاجة إلى تجاوز العمل #index
وتوفير القالب الخاص بك. لا يبدو أن هناك أي طريقة لمعرفة أن لا تظهر هذه القائمة.
وشيء من هذا القبيل:
active_scaffold :models do |config|
config.actions.exclude :index
end
وسيكون لديك ثم تنفيذ من طريقة المؤشر الخاص الذي يفعل ذلك هو القالب الخاص وهلم جرا. نسلمها إلى عمل بحث سقالة النشطة ل. لست متأكدا كيف يمكنك أن تفعل ذلك، ولكن إذا نظرتم الى مصدر HTML للصفحة الأصلية التي تعود ينبغي أن يكون واضحا جدا ما العمل انها تربط لأن يفعل البحث.