سؤال

كيف يمكنك البدء في إنتاج التقارير حسب النطاقات الزمنية التي حددها المستخدم في تطبيق Rails؟ما هي أفضل منتقي النطاق الزمني؟

تحرير ردا على باتريك :أنا أبحث عن القليل من النصائح المتعلقة بالأدوات والسجلات النشطة، ولكن ما يثير فضولي حقًا هو كيفية عرض قائمة ذات نطاق زمني بشكل مريح بناءً على التواريخ التي يحددها المستخدم.

هل كانت مفيدة؟

المحلول

هل نطرح سؤال واجهة هنا (أي؟تريد القطعة) أو سؤال ActiveRecord؟

تاريخ اختيار الحاجيات

1) الحل الافتراضي للقضبان:يرى date_select توثيق هنا.

2) استخدم البرنامج المساعد :لماذا أكتب الكود؟أنا شخصيا أحب تاريخ التقويمSelect البرنامج المساعد، وذلك باستخدام زوج من المصاصون عندما أحتاج إلى نطاق.

3) قم بتكييف عنصر واجهة مستخدم Javascript مع Rails:من السهل تقريبًا دمج شيء مثل مكتبة Yahoo UI (YUI) تقويم, ، والتي هي كلها جافا سكريبت، إلى Rails.من وجهة نظر ريلز، فهي مجرد طريقة أخرى لملء params[:start_date] و params[:end_date].يحتوي تقويم YUI على دعم أصلي للنطاقات.

الحصول على البيانات من الحاجيات

1) الحل الافتراضي للقضبان يرى date_select توثيق هنا.

#an application helper method you'll find helpful
#credit to http://blog.zerosum.org/2007/5/9/deconstructing-date_select

# Reconstruct a date object from date_select helper form params
def build_date_from_params(field_name, params)
  Date.new(params["#{field_name.to_s}(1i)"].to_i, 
       params["#{field_name.to_s}(2i)"].to_i, 
       params["#{field_name.to_s}(3i)"].to_i)
end

#goes into view
<%= date_select "report", "start_date", ... %>
<%= date_select "report", "end_date", ... %>    

#goes into controller -- add your own error handling/defaults, please!
report_start_date = build_date_from_params("start_date", params[:report])
report_end_date = build_date_from_params("end_date", params[:report])    

2) تاريخ التقويمSelect:يشبه إلى حد ما ما ورد أعلاه، فقط مع واجهة مستخدم مرئية أكثر جاذبية.

3) التكيف مع القطعة جافا سكريبت:عادةً ما يعني هذا أن بعض عناصر النموذج سيكون لها إدخال التاريخ كسلسلة.أخبار رائعة لك، نظرًا لأن Date.parse عبارة عن سحر خطير.ستتم تهيئة المعلمات[:some_form_element_name] بواسطة Rails نيابةً عنك.

#goes in controller.  Please handle errors yourself -- Javascript != trusted input.
report_start_date = Date.parse(params[:report_start_date])

كتابة المكالمة إلى ActiveRecord

سهلة مثل الفطيرة.

  #initialize start_date and end_date up here, by pulling from params probably
  @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?',
    start_date, end_date])
  #do something with models

نصائح أخرى

ليس من الممارسات غير المريحة أن تتحكم معلمات URL في نطاق السجلات المحددة.في إجراء الفهرس الخاص بك، يمكنك القيام بما اقترحه باتريك والحصول على ما يلي:

  #initialize start_date and end_date up here, by pulling from params probably
  @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', params[:start_date], params[:end_date]])

بعد ذلك، في عرض الفهرس، قم بإنشاء نموذج يربط ?start_date=2008-01-01&end_date=2008-12-31 بعنوان URL.تذكر أنها مدخلات مقدمة من المستخدم، لذا كن حذرًا معها.إذا قمت بإعادته إلى الشاشة في إجراء الفهرس الخاص بك، فتأكد من القيام بذلك على النحو التالي:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top