2016-09-08 49 views
0

我有一些數據,我想讓用戶能夠通過選擇給定的日期範圍來過濾這些數據。我可以用我自己的過濾器提供在控制器中的日期範圍內操控數據:Rails 4:使用窗體過濾數據

def self.filter_chart(date_start = 2.years.ago.to_s, date_end = Date.today.to_s) 
    real_start = date_start.to_date 
    real_end = date_end.to_date 
    part_1 = PotentialClient.where('created_at >= ?', real_start) 
    part_2 = part_1.where('created_at <= ?', real_end) 

    return part_2 
end 

@clients = PotentialClient.filter_chart(2.days.ago.to_s, Date.today.to_s)

...但我希望用戶能夠選擇的開始日期和結束日期,提交表單以顯示該日期範圍的數據。我如何構建一個表單/函數來做到這一點?

回答

0

我已經在我目前的應用程序中完成了這項工作。這是表單視圖。

<% 
    if params[:start_date].present? && params[:end_date].present? 
    start_date = Date.parse(params[:start_date]) 
    end_date = Date.parse(params[:end_date]) 
    else 
    start_date = Time.zone.today - 30.days 
    end_date = Time.zone.today 
    end 
%> 

<%= form_tag('', class: 'form', method: :post) do %> 
    <input type="text" class="form-control datepicker" name="start_date" value="<%= start_date.strftime("%Y-%m-%d") %>"> 
    <input type="text" class="form-control datepicker" name="end_date" value="<%= end_date.strftime("%Y-%m-%d") %>"> 
    <input type="submit" class="btn btn-primary" value="Run report"> 
<% end %> 

這裏是您的報告控制器。

def create 
    if params[:start_date].present? && params[:end_date].present? 
    start_date = Date.parse(params[:start_date]) 
    end_date = Date.parse(params[:end_date]) 
    else 
    start_date = Time.zone.today - 30.days 
    end_date = Time.zone.today 
    end 

    start_date = Time.zone.parse(params[:start_date]).beginning_of_day 
    end_date = Time.zone.parse(params[:end_date]).end_of_day 
    report_data = PotentialClient.where('created_at >= ?', start_date).where('created_at <= ?', end_date) 
end 
+0

事情是我不想'保存'一個新的條目,我只是想改變顯示的數據。這個答案會這樣做嗎? –

+0

是的,我更新了我的例子 –