2017-05-31 1 views
1

J'essaie d'utiliser bootstrap-confirmation pour une vue d'index avec des datatables et une colonne pour supprimer l'élément de ligne. Je l'ai fonctionné sans la confirmation, ou avec la confirmation par défaut, mais pas avec bootstrap-confirmation, il m'envoie à la méthode show, plutôt que la méthode de suppression du contrôleur. C'est comme il ne voit pas la méthode:: supprimerbootstrap-confiirmation ne gère pas la méthode: delete in rails app

Voici comment je l'appelle dans la vue d'index. La fenêtre de confirmation s'affiche, mais lorsque je clique sur OK, elle m'envoie à la page d'affichage. Ce qui suit fonctionne (sans confirmation), donc je sais que mes routes, action de contrôleur, etc fonctionnent.

<td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, %></td> 

Des idées?

Heres mon avis:

<h1> Roles</h1> 
</br> 

<table width="100%" class="table table-striped table-bordered table-hover" id="roles-table"> 
    <thead> 
    <tr> 
     <th>Roles</th> 
     <th>User Count</th> 
     <th>Delete Role</th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @roles.each do |role| %> 
    <tr> 
     <td><%= role.name %> 
     <td><%= role.users.count %></td> 
     <% if (role.users.count == 0) %> 
     <!--td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, :data => {:confirm => 'Are you sure?'}%></td--> 
     <td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, :'data-toggle' => 'confirmation', :'data-copy-Attributes' => 'href data-method'%></td> 

     <% else %>< 
     <td></td> 
     <% end %> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 
<br> 
<%= link_to "Add Role", new_role_path, class: "btn btn-success"%> 
+0

Pourriez-vous essayer avec ' <% = lien_à rôle, méthode:: delete, données: {bascule: 'confirmation', copie: {Attributs: 'méthode de données href'}} do%> <% end %> '? –

+0

Merci pour la suggestion, mais j'ai le même problème. Va à la page de spectacle. On dirait que la méthode delete n'est pas passée avec la syntaxe que vous avez fournie, parce que quand j'inspecte le bouton de confirmation de popup, il montre: Yes

+0

Pourriez-vous ajouter votre point de vue? –

Répondre

0

je ne pouvais pas faire le travail de la bibliothèque parce qu'elle ne fournit pas un moyen de modifier le code HTML popup génère, donc, il a également pris pour moi le lien vers la show méthode et aucun moyen de le supprimer.

Alors ce que je faisais était de créer un itinéraire pour supprimer la ressource qui attend de recevoir la id de la ressource et une valeur dans les params pour delete:

get 'role/:id/:delete', to: 'role#show', as: 'show_role' 

Ensuite, dans votre contrôleur, vous pouvez vérifier si vous receving un delete param, afin de séparer entre show et destroy, si vous le recevez, vous détruire et redirige vers le roles_url:

def show 
    @role = Role.find(params[:id]) 
    if params[:delete] 
    @role.destroy 
    redirect_to roles_url 
    end 
end 

Alors, selon vous, vous pouvez utiliser une aide link_to, en passant l'itinéraire créé en passant précédemment la ressource et une valeur pour la delete param, en ajoutant les données attributs Bootstrap Confirmation doit faire fonctionner:

<%= link_to 'Destroy', show_role_path(role, delete: true), data: { toggle: 'confirmation', title: 'Delete it?' } %> 
+0

Merci Sebastian pour jeter un oeil à cela. Bien que votre solution soit créative, je ne veux vraiment pas utiliser une confirmation qui nécessite des réglages de routage, car chaque contrôleur en aura besoin, donc je suppose que je devrai utiliser un type de confirmation différent. Peut-être le sweetalert2, car il utilise la méthode des rails réguliers avec confirmation des données –