2016-09-11 4 views
0

Ich habe Probleme mit einem ziemlich einfachen Fluss in Rails. Ich möchte, dass ein Benutzer einen Text eingibt und dann das Backend aufruft, das dann eine GET-Anfrage an eine RESTful-API in einer anderen Domäne sendet. Ich möchte dann diese Informationen verwenden, um die Suchergebnisse anzuzeigen, aber ich habe keinen Zugriff auf die Variable, die ich aus irgendeinem Grund eingestellt habe.Rails: Calling API (eine andere Domain), um Suchergebnisse zu erhalten

houses_controller.rb

class HousesController < ApplicationController 
    def index 
    end 

    def search 
     @search_results = ["fake", "test", "results"] 
    end 
end 

index.html.erb

<%= form_tag("/houses/search", method: "get", remote: true) do %> 
    <%= label_tag(:query, "Search for:") %> 
    <%= text_field_tag(:query) %> 
    <%= submit_tag("Search") %> 
<% end %> 

<% if(@search_results.nil?) %> 
    <p>nil....</p> 
<% else %> 
    <% @search_results.each do |res| %> 
     <p> 
     "result..." 
     </p> 
    <% end %> 
<% end %> 

routes.rb

Rails.application.routes.draw do 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
    root :to => "houses#index" 
    get "/houses/search" => "houses#search" 
end 

ich auf der Root-Seite starten und ich remote: true in meinem form_tag weil Ich glaube, so machen Leute AJAX-Anfragen? Bin ich komplett auf der Suche nach einer Ajax-Anfrage? Ich würde es vorziehen, nur jQuery zu verwenden, aber es schien, als ob dies der Weg von Rails war.

Ich habe auch versucht, eine search.html.erb zu haben, weil ich beim Debuggen eine Nachricht gesehen habe, die "No template found for HousesController#search, rendering head :no_content" gelesen hat, aber selbst wenn ich diese Datei hinzugefügt habe, hat es keinen Unterschied gemacht, weil es immer noch die index.html.erb rendert hat Datei und vollständig ignoriert die search.html.erb-Datei.

Ich habe auch versucht, @search_results in der Indexaktion. Es funktioniert, wenn ich es dort einstelle, aber ich will nicht den statischen Wert, den ich dort einstellen würde, ich will den Wert, der erzeugt wird, wenn ich die "Suche" Aktion rufe.

Antwort

0

Wenn Sie remote: true verwenden, sollten Sie eine search.js.erb nicht html.erb erstellen. Sie könnten einen read_to-Block verwenden und das Verhalten für den js-Aufruf angeben.

Verwandte Themen