يمكن ActiveScaffold تهيئتها لإظهار نموذج بحث قبل عرض قائمة؟

StackOverflow https://stackoverflow.com/questions/489798

سؤال

وعندما أسأل 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 للصفحة الأصلية التي تعود ينبغي أن يكون واضحا جدا ما العمل انها تربط لأن يفعل البحث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top