2016-09-08 5 views
0

Ich habe einige Daten und ich möchte dem Benutzer die Möglichkeit geben, diese Daten zu filtern, indem Sie einen bestimmten Datumsbereich auswählen. Ich kann die Daten manipulieren, indem Sie den Datumsbereich in der Steuerung Versorgung meiner eigenen Filter mit:Schienen 4: Filtern von Daten mit Formular in Sicht

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)

... aber ich möchte, dass die Benutzer in der Lage sein, ein Startdatum und Enddatum auszuwählen und Übermitteln Sie das Formular, um Daten für diesen Zeitraum anzuzeigen. Wie konstruiere ich eine Form/Funktion, um das zu tun?

Antwort

0

Ich habe dies in meiner aktuellen App getan. Hier ist die Formularansicht.

<% 
    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 %> 

Und hier ist Ihre Berichte Controller.

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

Die Sache ist, ich versuche nicht, einen neuen Eintrag zu speichern, ich möchte nur die angezeigten Daten ändern. Würde diese Antwort das tun? –

+0

Ja, ich habe mein Beispiel aktualisiert –