Molte cose devono essere presenti per far funzionare tutto questo, compreso il: ritirato => vera bandiera sull'elemento scatenante, il respond_to : js flag nella definizione della classe del controller, il percorso, la vista parziale e infine il jquery per il rendering effettivo di un partial dinamico deve essere contenuto in un file .html.js separato.
Gli esempi di seguito sono per un metodo fittizio "render_partial_form" del controller "someajax".
1) Aggiungere un: a distanza => vera bandiera con l'elemento scatenante
mettere il: distanza => vera bandiera sul tag link o modulo nel file .html.erb (vista) per il elemento che si desidera attivare la chiamata AJAX, come
<%= form_tag("/someajax", method: 'post', :remote => true) do %>
con: a distanza => true, rotaie non passa automaticamente di vista, che permette al JQuery da eseguire, invece. Può essere utilizzato con un tag form, un tag link o altri tipi di tag.
2) Aggiungere "respond_to: html,: js" nella parte superiore del controller
Nella parte superiore della definizione di classe del controller, è necessario ora specificare che il controller in grado di rispondere a JavaScript come pure come html:
class SomeajaxController < ApplicationController
respond_to :html, :js
...
def render_partial_form
@array_from_controller = Array.new
...
end
end
In questo esempio, c'è un essere variabile passata dal controller nella vista: un array di selezionare le opzioni di elenco chiamati @array_from_controller
.
3) Far passare il http verbo metodo del controller
dato che volevo una forma Pubblicato per attivare la chiamata AJAX, ho indirizzato il palo verbo per il mio controller alla vista render_partial_form.
post 'someajax' => 'someajax#render_partial_form
Procedimento controllore definito da def render_partial_form
corrispondenze con il nome della vista, _render_partial_form.html.erb
quindi non c'è bisogno di chiamare un rendering azione dal controller.
4) Creare la vista parziale
La vista parziale deve avere lo stesso nome come metodo di controllo e iniziare con un carattere di sottolineatura: _render_partial_form.html.erb
<h3>Here is the partial form</h3>
<%= form_tag("/next_step", method: 'post') do %>
<%= label_tag(:data, "Some options: ") %>
<%= select_tag(:data, options_for_select(@array_from_controller.transpose[0].collect)) %>
<%= submit_tag('Next') %>
<% end %>
5) Creare il file JQuery
Le istruzioni JQuery attivano il rendering del modulo. Sostituisci "render_partial_form" con il nome effettivo del tuo metodo di controllo e vista parziale. L'effetto slideDown è opzionale "eye candy". Creare un file con estensione .js.erb, e lo stesso nome del vostro controller:
render_partial_form.js.erb
$('#render_partial_form').html("<%= escape_javascript (render partial: 'render_partial_form') %>");
$('#render_partial_form').slideDown(350);
Nelle versioni di Rails più recenti è necessario il gem di "responders" per implementare il livello di controllo answer_to: html,: js – emery
Il fatto che il partial abbia dovuto essere denominato uguale al metodo AJAX è ciò che mi ha salvato. Spero che altri possano trovare questo, ottima risposta. – justinraczak
Grazie. In realtà ho avuto qualche problema nel far funzionare più a fondo questo aspetto su un progetto diverso ... Mi chiedo se i dati: {type:: html} dovessero essere nel form_tag, come per la risposta di mltsy. – emery