2008-09-26 53 views
20

Bạn sẽ tạo báo cáo theo phạm vi ngày đã chọn của người dùng trong ứng dụng đường ray như thế nào? Bộ chọn phạm vi ngày tốt nhất là gì?Tạo báo cáo theo phạm vi ngày trong đường ray

chỉnh sửa để đáp ứng với patrick: Tôi đang tìm kiếm một chút về cả tiện ích con và ghi chú hoạt động nhưng những gì tôi thực sự tò mò là cách hiển thị danh sách dao động ngày dựa trên ngày đã chọn của người dùng.

Trả lời

30

Có phải chúng tôi đang đặt câu hỏi về giao diện ở đây (tức là bạn muốn có tiện ích con) hoặc câu hỏi ActiveRecord?

Ngày Chọn Widgets

1) Mặc định Rails Giải pháp: Xem date_select tài liệu here.

2) Sử dụng plugin: Tại sao phải viết mã? Cá nhân tôi thích plugin CalendarDateSelect, sử dụng một cặp kẻ hút khi tôi cần một dải ô.

3) Áp dụng tiện ích con Javascript vào Rails: Nó gần như tầm thường để tích hợp một cái gì đó như thư viện giao diện người dùng Yahoo (YUI) Calendar, là tất cả Javascript, vào Rails. Từ quan điểm của Rails nó chỉ là một cách khác để điền vào các params[:start_date]params[:end_date]. Lịch YUI có hỗ trợ gốc cho các phạm vi.

Lấy dữ liệu từ Widgets

1) Mặc định Rails Giải pháp Xem date_select tài liệu here.

#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) CalendarDateSelect: Thay tương tự như trên, chỉ cần với giao diện người dùng có thể nhìn thấy sexy hơn.

3) Áp dụng tiện ích Javascript: Thông thường, điều này có nghĩa là một số phần tử biểu mẫu sẽ có ngày tháng vào làm chuỗi. Tin tuyệt vời cho bạn, vì Date.parse là một số phép thuật nghiêm trọng. Các thông số [: some_form_element_name] sẽ được Rails khởi tạo cho bạn.

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

Viết cuộc gọi đến ActiveRecord

dễ dàng như chiếc bánh.

#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 
+0

Một chút về cả tiện ích con và hoạt động nhưng điều tôi thực sự tò mò là cách hiển thị ngày tháng một cách yên tĩnh danh sách dựa trên ngày được người dùng chọn. Cụ thể, cách tốt nhất để nhận dữ liệu đầu vào từ người dùng vào bản ghi đang hoạt động. – srboisvert

+0

Tôi đã tự do mở rộng câu trả lời của mình để hữu ích hơn cho bạn. –

+0

không nên build_date_from_params đi vào bộ điều khiển ứng dụng chứ không phải là trình trợ giúp ứng dụng? – inglesp

2

Thực tiễn không chính xác để có thông số URL kiểm soát phạm vi của các bản ghi đã chọn. Trong action index của bạn, bạn có thể làm những gì Patrick đề xuất và có điều này:

#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]]) 

Sau đó, theo quan điểm chỉ số của bạn, tạo ra một hình thức mà đinh trên start_date = 2008/01/01 & end_date = 2008-12-31? vào URL. Hãy nhớ rằng đó là đầu vào do người dùng cung cấp, vì vậy hãy cẩn thận với nó. Nếu bạn đặt nó trở lại trên màn hình trong hành động chỉ mục của mình, hãy đảm bảo thực hiện điều này như sau:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %> 
Các vấn đề liên quan