2010-10-20 3 views
0

J'essaie de convertir mon application Rails 2 en Rails 3, mais je ne peux pas supprimer de ressources en utilisant mon ancien code Rails 2. Pour être précis, j'essaie de supprimer une ressource, en utilisant ce lien:Gestion de ressources reposantes dans Rails 3

<%= link_to image_tag("misc/delete.png"), @book, :confirm => 'Are you sure?', :method => :delete %> 

Et pourtant ça ne marche pas du tout! Il se comporte simplement comme si l'option :confirm et l'option :method n'ont pas été définies du tout, c'est-à-dire qu'elles me redirigent vers l'URL de l'objet @book sans même afficher de boîte d'alerte.

Le code HTML généré dans Rails 3 est:

<a href="/books/13" data-method="delete" rel="nofollow"><img alt="Delete" src="/images/misc/delete.png?1205252772"></a> 

Le code HTML généré dans Rails 2 était:

<a href="/books/11" class="small" onclick="if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'uPeQI9FZxJT+DQlWvb02X5FEihG/hJgBk+vUhDwYT8o='); f.appendChild(s);f.submit(); };return false;"><img alt="Delete" src="/images/misc/delete.png?1279402305"></a> 

Il est une différence évidente, mais j'ai aucune idée comment je devrais gérer ce problème.

Mon contrôleur ressemble à ceci:

class BooksController < ApplicationController 
    before_filter :require_admin, :only => ['new', 'create', 'edit', 'update', 'destroy'] 

    # .... 

    def destroy 
    puts "-------------- DESTROYING BOOK --------------" 
    @book = Book.find(params[:id]) 
    @book.destroy 

    flash[:notice] = "Successfully destroyed book." 
    session[:restore] = request.referer 
    redirect_to back(edit_author_url(@book.author)) 
    end 
end 

Et la chaîne « détruire livre » ne montre pas sur la console, donc je pense qu'il faut sûrement quelque chose de mal.

Est-ce que quelque chose dans la manipulation reposante a été changé dans Rails 3 que je devrais apprendre à connaître?

Merci, les gars!

Répondre

1

Vous avez besoin de la bibliothèque javascript rails.

+0

Oui, il y a quelque chose comme ça. Il ne semble pas en avoir besoin dans Rails 2. J'ai oublié d'ajouter le Rails-3-specific * rails.js *, mais cela me donne des erreurs dans Chrome. Je vais voir ce que je peux faire. Merci! –

+0

Bien sûr ;-) Mais d'abord je dois le faire fonctionner et être sûr que c'est tout. J'ai maintenant des problèmes avec prototype.js: 'TypeError Uncaught: Objet # n'a pas de méthode 'dispatchEvent'' –

+0

Problème résolu. JQuery écrasait la méthode '$' du prototype. Des trucs drôles. –

Questions connexes