2013-10-31 9 views
7

Dies hat mich bei mehreren verschiedenen Anlässen verwirrt und jedes Mal habe ich Mühe, eine gute Antwort im Internet oder im World Wide Web zu finden. Lassen Sie uns sagen, dass in meinem Javascript-Datei ISenden Sie Daten in Params zu Schienen Back-End mit jQuery Ajax Get

var myLoc = { lat: 35, lon: -110 } 

eine Variable, die ich verwenden, Geolocation whatnot bekam. Ich möchte diese Informationen an das Backend senden, um es mit einem bestimmten Beitrag zu verbinden, den ich erstellen werde.

Angenommen, meine Routen sind nur das:

resources :users do 
    resources :posts 
end 

Ich weiß nicht, ob dies der richtige Weg ist, aber in den Sinn kommt, was ist so etwas wie dieses:

$.get('/users/' + JSON.stringify(myLoc) + '/posts/new', function() {console.log("please work")}); 

Meine Fragen sind :

A. Sollte das funktionieren?
B. Ist es der richtige Weg, dies zu tun?
C. Können Sie Frontends wie diese an eine beliebige Route im Backend senden?

Sehr geschätzt.

+0

'A.' Sie haben Art die richtige Idee. 'B.' Nein, Sie sollten einen API-Namespace und Routen innerhalb Ihrer Rails-App angeben. Im Idealfall würde Ihre API auf jQuery AJAX-Anfragen mit JSON antworten. Sie verwenden auch '$ .get' falsch. Sie sollten die Dokumentation zu dieser jQuery-Methode lesen. 'C.' Ja, aber die Route mag es nicht. Siehe Antwort "B". –

+0

Wie funktioniert der API-Namespace? Haben Sie einen guten Link zu Informationen über diese – natecraft1

Antwort

8

Sie können Informationen über den Query-String an eine Seite mit get senden, dann können Sie Felder in der new Ansicht ausfüllen, in der sich das Formular befindet, das schließlich an die create-Aktion übergeben wird.

Dies gibt jedoch auch den Text der neuen Aktionsansicht in der Antwort zurück, die Sie möglicherweise verwenden möchten, wenn Sie diese Seite für einen Dialog oder etwas asynchron verwenden.

Es könnte besser sein, wenn Sie diesen Ajax-Aufruf verwenden, um einen Post zu erstellen, zu post zu einer /create Aktion auf dem Posts Controller.

Dann können Sie die Daten in JSON als post senden und das Objekt wird in den params Hash übersetzt, wenn Ihr Controller es analysiert und erstellt den Beitrag.

js in der Ansicht:

var url = '/users/' + userId + '/posts/create'; 
var myLoc = { 'lat': 35, 'lon': -110 }; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: myLoc 
}); 

in routes.rb:

match 'users/:user_id/posts/create' => 'posts#create', :via => :post 

in posts_controller.rb:

def create 
    post = Post.new(params[:myLoc]) 
    if post.save! 
    render :status => 200 
    else 
    # exception handling 
    end 
end 
+1

Sie müssen nicht explizit das 'create' in der URL explizit angeben und implementieren Sie die Übereinstimmung nicht. Eine POST-Anfrage an/users/user_id/posts wird der Methode 'create' in posts_controller.rb zugeordnet. –

+0

Ah, Sie sind richtig! Es ist eine Eigenschaft von Ressourcen-Routing wie hier zu sehen: http://guides.rubyonrails.org/routing.html # crud-verbs-and-actions –

+0

ich verstehe nicht, was das bedeutet "Dies wird jedoch auch den Text der neuen Aktionsansicht in der Antwort zurückgeben, die Sie vielleicht möchten, wenn Sie diese verwenden, um diese Seite asynchron zu ziehen für einen Dialog oder etwas. " und kann ich Informationen wie diese über eine beliebige Route senden? sogar ohne einen Parameter, zum Beispiel get '/ show_posts'? – natecraft1