2013-10-31 11 views
7

Questo mi ha confuso in diverse occasioni e ogni volta faccio fatica a trovare una buona risposta su Internet o il World Wide Web. Diciamo che nel mio file JavaScript ho una variabileInvia i dati in params alle rotaie back-end utilizzando jQuery Ajax ottenere

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

che ho avuto da utilizzare geolocalizzazione quant'altro. Voglio inviare queste informazioni al backend per associarlo a un post specifico che ho intenzione di creare.

assumere la mia rotte sono proprio questo:

resources :users do 
    resources :posts 
end 

Non so se questo è il modo corretto, ma quello che viene in mente è qualcosa di simile:

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

Le mie domande sono :

A. Nel caso in questo lavoro?
B. E 'il modo giusto per fare questo?
C. È possibile inviare materiale di front-end come questo a qualsiasi percorso nel back-end?

Molto apprezzato.

+0

'A.' Si tipo di avere l'idea giusta 'B.' No, dovresti specificare uno spazio dei nomi API e percorsi all'interno dell'app. Idealmente, l'API avrebbe risposto di nuovo a richieste jQuery AJAX con JSON. Stai anche usando '$ .get' in modo errato. Dovresti andare a leggere la documentazione su quel metodo jQuery. 'C.' Sì, ma il percorso potrebbe non piacere. Vedi risposta 'B'. –

+0

Come funziona lo spazio dei nomi API? hai un buon link per informazioni su quello – natecraft1

risposta

8

È possibile inviare informazioni a una pagina con get tramite la stringa di query, quindi questo può essere utilizzato per compilare i campi nella vista new, che è il modulo che alla fine verrà sottoposto all'azione di creazione.

Tuttavia, questo restituirà anche il corpo della nuova vista di azione nella risposta, che può essere utile se si utilizza questa opzione per estrarre in modo asincrono quella pagina per una finestra di dialogo o qualcosa del genere.

Potrebbe essere meglio, se si sta utilizzando questa chiamata ajax per creare un post, su post su un'azione /create sul controller dei post.

Quindi è possibile inviare i dati in JSON come post e l'oggetto si tradurrà nell'hash params quando il controllore esegue l'analisi e crea il post.

js nella vista:

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

? non hai bisogno di specificare il 'creare' nella url in modo esplicito e non attuare la corrispondenza. Una richiesta POST a/users/user_id/posts verrà mappata al metodo 'create' in posts_controller.rb –

+0

Ah, hai ragione! È una caratteristica del routing delle risorse come visto qui: http://guides.rubyonrails.org/routing.html # crud-verbs-and-actions –

+0

non capisco cosa significa "Tuttavia, questo restituirà anche il corpo della nuova vista di azione nella risposta, che si può volere se si utilizza questo per estrarre in modo asincrono quella pagina per un dialogo o qualcosa del genere. " e posso inviare informazioni come questa usando qualsiasi percorso? anche senza un parametro, ad esempio ottieni '/ show_posts'? – natecraft1

Problemi correlati