문제

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 %>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top