2013-07-03 2 views
0

레일스 3.2 애플리케이션에 마일리지라는 모델이 있습니다. Prawn PDF를 사용하여 마일리지 인덱스 작업의 PDF 출력을 추가했습니다.양식을 제출하여 PDF 내보내기 중에 달을 선택하십시오.

mileages_controller의 index 액션은 다음과 같습니다 : 내가하고 싶은 무엇

def index 
    @mileages = Mileage.find_all_by_user_id(current_user.id) 
    @mileages_months = Mileage.find_all_by_user_id(current_user.id).group_by { |t| t.created_at.beginning_of_month } 


    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @mileages } 
     format.pdf do 
      pdf = MileagePdf.new(@mileages, view_context) 
      send_data pdf.render, filename: "mileages_report.pdf", 
            type: "application/pdf", 
            disposition: "inline" 
      end 
    end 
    end 

은 PDF 버전으로 인덱스 뷰에 링크를 가지고 있지만 함께 시작 날짜와 종료 날짜가 될 것입니다. 그러면 PDF는 두 날짜 사이의 마일리지 항목 만 표시합니다.

PDF 링크는 단순히 <%= link_to "Mileage Report (PDF)", mileages_path(@mileages, format: "pdf") %>

는 액티브 필터는, 아마도,이 같은 것 같습니다

@mileages = Milage.where(:date => ??..??) 

내가 날짜 입력에 위의 넥타이를하는 방법을 확실입니다. 어떤 도움을 주시면 감사하겠습니다!

답변

1

날짜가 있으니 양식 제출을 시도하십시오.

UPDATED with Final answer from chat

def index 
    start_date = params[:mileage_start] 
    end_date = params[:mileage_end] 
    if start_date && end_date 
     dates = get_start_and_end_date(start_date,end_date) 
     @mileages_pdf = Mileage.where(date: dates[:start_date]..dates[:end_date]) 
    end 

    respond_to do |format| 
    # format.html # index.html.erb 
    # format.json { render json: @mileages } 
     format.pdf do 
     pdf = MileagePdf.new(@mileages_pdf, view_context) 
     send_data pdf.render, filename: "mileages_report.pdf", 
     type: "application/pdf", 
     disposition: "inline" 
     end 
    end 
    end 

    def get_start_and_end_date(start_date,end_date) 
    hsh = {} 
    hsh[:start_date] = build_date(start_date) 
    hsh[:end_date] = build_date(end_date) 
    hsh 
    end 

    def build_date(hsh) 
    DateTime.new(hsh["date(1i)"].to_i,hsh["date(2i)"].to_i,hsh["date(3i)"].to_i) 
    end 

<%= form_tag(mileages_path(format: :pdf), method: :get) do -%> 
    <%= date_select("mileage_start", "date", order: [:year,:month,:day])%> 
    <%= date_select("mileage_end", "date", order: [:year,:month,:day])%> 
    <%= submit_tag %> 
    <%end%> 
당신이 PARAMS에서 날짜를 캡처하고 원하는 방식으로 포맷 및 쿼리에 배치 할 수 있습니다이 방법

.

+0

컨트롤러 코드는 어떻게됩니까? 'Milage.where (: date => # {시작} .. # {끝})'? – dannymcc

+0

양식 제출 날짜 형식을 내 대답 업데이트했습니다. – AnkitG

+0

올바르게 이해하면 코드 예제 중 더 낮은 것이 내 인덱스 메서드에 포함되어야합니다. 그러나 'nil 클래스에 대해'정의되지 않은 메서드 값 '이 나타납니다. – dannymcc

관련 문제