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]
và 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
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
Tôi đã tự do mở rộng câu trả lời của mình để hữu ích hơn cho bạn. –
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