Ainsi la façon dont on m'a enseigné initialement pour implémenter ajax dans mes applications rails est de créer un fichier js pour chaque action par contrôleur, puis de référencer ce fichier js dans le répond_to bloc.Renvoyer javascript du contrôleur sans action js fichier spécifique
Ceci est vraiment embêtant, et j'aime inclure tout mon javascript dans un seul fichier main.js, c'est-à-dire ne pas compartimentaliser chaque extrait.
Cela a bien fonctionné jusqu'à présent, sauf lorsque je veux passer un objet à la fonction appropriée.
Voici comment je suis censé gérer la demande ajax pour créer une nouvelle liste d'utilisateurs dans mon application:
<%= form_for @client, action: :create, remote: true do |f| %>
<%= f.text_field :firstname, placeholder: 'First Name' %>
<%= f.text_field :lastname, placeholder: 'Last Name' %>
<%= f.hidden_field :status, value: true %>
<%= submit_tag :create %>
<% end %>
.... formulaire est la télécommande: tag vrai.
def create
@client = current_trainer.clients.create(client_params)
respond_to do |format|
format.html { redirect_to clients_path }
format.js
end
end
.... créer une action passe par défaut réponse à créer le fichier:
$('.active').prepend("<%= j render @client %>");
C'est bien beau. Mais je n'aime pas cette configuration. Je veux faire un appel comme celui-ci à la place:
def create
@client = current_trainer.clients.create(client_params)
respond_to do |format|
format.html { redirect_to clients_path }
format.js { render js: "theApp.clientsPage.saveClient();" }
end
end
.... puis dans le fichier main.js.erb je:
saveClient: function() {
$('.active').prepend("<%= j render @client %>");
},
mais l'erreur que je reçois est le suivant:
undefined method `render' for #<#<Class:0x007fd278f350c8>:0x007fd27b182298>
C'est plus proche que je pense, mais pas de cigare. Il ajoute littéralement le texte '<% = j render @client%>' au lieu du code à évaluer. –
@ ninja08 sûr, désolé. Ça doit être "# {...}" bien sûr. Et mieux ajouter un bloc et pas de texte, par exemple 'div'. – ostapische
Merci, même si cela ne fonctionne pas non plus. –