레일의 날짜 범위별로 보고서 생성
-
02-07-2019 - |
문제
Rails 앱에서 사용자가 선택한 날짜 범위에 의해 보고서를 어떻게 작성 하시겠습니까? 최고의 날짜 범위 피커는 무엇입니까?
Patrick에 대한 응답으로 편집 : 나는 약간의 위젯과 활성 레코드 조언을 찾고 있지만 실제로 궁금한 점은 사용자가 선택한 날짜를 기준으로 날짜 원거리 목록을 편안하게 표시하는 방법입니다.
해결책
우리는 여기서 인터페이스 질문 (예 : 위젯을 원한다) 또는 activerecord 질문을하고 있습니까?
날짜 선택 위젯
1) 기본 레일 솔루션: 보다 date_select
선적 서류 비치 여기.
2) 플러그인을 사용하십시오 : 왜 코드를 작성합니까? 나는 개인적으로 좋아한다 CalendardatesElect 범위가 필요할 때 빨판을 사용하는 플러그인.
3) JavaScript 위젯을 레일에 조정하십시오: Yahoo UI 라이브러리 (Yui)와 같은 것을 통합하는 것은 거의 사소한 일입니다. 달력, 모든 JavaScript, Rails. Rails의 관점에서 params[:start_date]
그리고 params[:end_date]
. Yui Calendar는 범위에 대한 기본 지원이 있습니다.
위젯에서 데이터를 얻습니다
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) CalendardatesElect: 오히려 위와 유사하며, 더 섹시한 가시 UI와 함께.
3) JavaScript 위젯을 조정하십시오: 일반적으로 이것은 일부 양식 요소가 문자열로 날짜 입력을 갖는다는 것을 의미합니다. Date.parse는 심각한 마법입니다. params [: some_form_element_name]은 레일로 초기화됩니다.
#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 매개 변수가 선택한 레코드의 범위를 제어하도록하는 것은 불안한 관행이 아닙니다. 색인 조치에서 Patrick이 제안한 것을 수행하고 다음을 수행 할 수 있습니다.
#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 %>