2016-10-10 3 views
1

aktualisieren Ich habe eine grundlegende index.json.jbuilder Datei in Kunden/index.json.jbuilder:Rails .json.jbuilder

json.array!(@clientsAPI) do |client| 
    json.extract! client, :year, :business_name 
end 

Wenn ich ein Formular in meiner Ansicht vorlegen, wird die @clientsAPI in die aktualisierte Indexmethode des clients_controllers. Der Index.json.jbuilder wird jedoch nicht aktualisiert und behält die alten Werte @clientsAPI (vor dem Senden des Formulars) bei.

Wie kann ich @clientsAPI bekommen, um in index.json.jbuilder bei der Formularaktualisierung aktualisiert zu werden?

clients_controlled Code:

def index 
     @clients = Client.all 

     begin 
      @year_filter = params[:c][:year] 
     rescue 
      @year_filter = ["2016"] 
     end 

     @clientsAPI = @clients.where(year:@year_filter) 

     render 'index' 
end 

Kunden/index.html.erb den Index Verfahren geroutet Form oben gezeigt:

<%= form_for :c, url:clients_path, method: :get" do |f| %>  
    <%= f.select :year, options_for_select(@years),{onchange: "this.form.submit();"} %> 
<% end %> 
+0

Welche Maßnahmen Formular einreichen (erstellen/aktualisieren usw.)? Können Sie den Controller-Code für diese Aktion und den entsprechenden create.json.jbuilder/update.json.jbuilder anzeigen? Ich vermute, dass in dieser Aktion keine '@ clientsAPI'-Variable gesetzt ist. –

+0

Ich habe den Controller-Code hinzugefügt. Das Formular wird weitergeleitet, um eine "GET" -Anforderung an die Indexmethode zu senden. Alles innerhalb von Rails wird problemlos aktualisiert, aber aus irgendeinem Grund wird die @ clientsAPI in index.json.jbuilder nicht aktualisiert, wenn das Formular übermittelt wird. Irgendwelche Ideen, was hier zu sehen ist? Soll der Jbuilder bei der Formularübergabe aktualisiert werden? – HoosierCoder

+0

Ist Ihr Formular eine JSON-Anfrage oder HTML? Es muss mit 'format: 'json'' gesendet werden und dann musst du sicherstellen, dass du auf das json Format in deinem Controller reagierst:' respond_to do | format | ... usw. Ich bin nicht sicher, was Ihr 'export_grid_if_requested' Block tut, aber wenn Sie dorthin gelangen, wird nur die HTML-Antwort rendern und nicht die index.json.jbuilder –

Antwort

1

Dies ist nicht getestet, sollte aber hoffentlich bekommen Sie nah genug dran ..

In Ihrem form_for müssen Sie ihm mitteilen, dass er eine json-Anfrage senden soll. Etwas wie:

<%= form_for :c, url:clients_path(format: 'json'), method: :get" do |f| %> 

dann in Ihrer Index-Methode, reagieren auf die json Anfrage:

def index 
    @clients = Client.all 

    begin 
     @year_filter = params[:c][:year] 
    rescue 
     @year_filter = ["2016"] 
    end 

    @clientsAPI = @clients.where(year:@year_filter) 

    respond_to do |format| 
     format.html { 
     render 'index' 
     } 
     format.json { 
     #any logic here specific to a json request. 
     #doing nothing will render index.json.jbuilder by default 
     } 
    end 

Ende

+0

Also, das ist nah dran. Aber es macht immer dann die JSON-Antwort. Ich brauche es, um sowohl den JSON als auch den Index zu rendern. Weißt du, wie man beide rendert? – HoosierCoder

+0

Was müssen Sie mit der HTML- und der JSON-Antwort tun? Ich glaube nicht, dass Rails wirklich dazu ausgelegt ist, mehrere Antworten aus einer einzigen Anfrage zu erhalten. Es sollte weg sein, um zu tun, was Sie mit dem einen oder anderen Format benötigen –

+0

Ich habe eine eckige Tabelle in der Ansicht, die die .json Antwort liest und Daten anzeigt. In derselben Ansicht werden auch Diagramme angezeigt, die sich in Schienen befinden. Also versuche ich, die aktualisierten Informationen sowohl in den Rails Charts als auch in der eckigen Tabelle anzuzeigen. – HoosierCoder