Je suis en train de mettre en œuvre des modèles imbriqués, voici l'entrée du fichier d'itinéraire:Comment implémenter remote: fonctionnalité vraie sans link_to?
resources :projects do
resources :instances
end
Ce qui suit est l'extrait de code pour le contrôleur de projet:
# GET /projects/new
def new
@project = Project.new
@project.instances.build
end
et la vue sous forme de projet:
<%= simple_form_for(@project) do |f| %>
...
<%= label_tag :instance_count, "Instance Count" %>
<%= select_tag :instance_count, options_for_select([0, 1, 2, 3, 4, 5], 0) %>
...
<% end %>
Maintenant, quand je change le nombre de nombre d'instances, j'ai besoin d'afficher les champs d'instance plusieurs fois ci-dessous le formulaire ci-dessus. Voici le code partiel pour que:
<%= form.simple_fields_for :instances do |i| %>
...
<% end %>
Fondamentalement, je besoin d'appeler <%= render 'instances/form', form: f %>
du fichier javascript de projet. Cela devrait fonctionner comme un lien avec l'option remote: true
. Mais dans ce cas, il n'y a pas de lien, mais sur l'événement de changement, le formulaire doit être affiché. Comment devrais-je l'implémenter?
lorsque vous cliquez sur '@project [: instance_count]' et changer le numéro, vous souhaitez afficher un nombre différent de champs d'entrée 'instances'? Est-ce que cela nécessite AJAX? peut-être qu'il suffit juste d'écouter cet événement click sur ce div pour ajouter un nouveau div sur cette page et quand vous soumettez le formulaire, assurez-vous que le submit fonctionne pour ces champs .... Je pense à poster une réponse .. champs d'entrée c'est un peu compliqué parce que le formulaire a un 'token' qui évite CSRF, aussi le submit doit être effectué peut-être avec' Javascript' et vous devrez créer une requête jquery '.post()' –
Votre déclencheur entendre est le clic sur le '<% = select_tag: instance_count, options_for_select ([0, 1, 2, 3, 4, 5], 0)%>' so '$ (' # select_tab '). div à la page en fonction du div.value() résultat); ', il n'y a pas d'interaction avec le serveur. Ensuite, vous devez faire la demande 'post' dans le fichier javascript avec cette fonction https://api.jquery.com/jQuery.post/ –