2009-04-08 4 views
1

J'ai un link_to_remote pour rendre l'action d'édition d'un objet. Mais tout ce qu'il fait est de mettre à jour l'élément Dom avec cette réponseRails: la mise à jour link_to_remote ne rend pas la vue

try { } catch (e) { alert('RJS error:\n\n' + e.toString()); alert(''); throw e } 

Mon lien ressemble à ceci:

= link_to_remote t("txt.edit"), :update => dom_id(comment), :url => edit_comment_path(comment.id) 

Mon action d'édition dans le contrôleur de commentaire:

# GET /comments/1/edit 
    def edit 
    @comment = Comment.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.js { render :action => "edit" } 
    end 
    end 

La demande semble pour être ok, selon le journal:

Processing CommentsController#edit (for 127.0.0.1 at 2009-04-08 18:55:36) [GET] 
    Session ID: 1d4b9b3d3319d5cd556d00d2e053b651 
    Parameters: {"authenticity_token"=>"5d70f9e5beded361ee7e87ee591512411e8f3eec", "id"=>"18"} 
    User Columns (2.0ms) SHOW FIELDS FROM `users` 
    User Load (0.5ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1 
    Account Columns (1.6ms) SHOW FIELDS FROM `accounts` 
    Account Load (0.2ms) SELECT * FROM `accounts` WHERE (`accounts`.`subdomain` = 'xxx') LIMIT 1 
    Comment Columns (1.7ms) SHOW FIELDS FROM `comments` 
    Comment Load (0.6ms) SELECT * FROM `comments` WHERE (`comments`.`id` = 18) 
Rendering comments/edit 
Completed in 30818ms (View: 2, DB: 7) | 200 OK [http://xx.xxx.rails/comments/18/edit?authenticity_token=5d70f9e5beded361ee7e87ee591512411e8f3eec] 

Qu'est-ce que je fais mal? Merci pour l'aide!

MISE À JOUR: Cela fonctionne d'ailleurs avec un modèle RJS - c'est ainsi que je l'ai résolu maintenant. Mais je préfère toujours une solution où une vue est rendue. Sinon, je dois créer un partiel juste à cet effet (je ne peux pas rendre des vues avec des mises à jour de page rjs - au moins, je ne sais pas comment).

Répondre

0

La seule chose que vous avez omis de mentionner est ce que le modèle est ... Je suppose que c'est le problème. Si elle est ERB essayer quelque chose comme:

format.js {render: action => "edit.html.erb"}

+0

I est un modèle haml, alors devrais-je essayer: render: action => "edit.haml"? –

+0

Utilisez simplement le nom complet du modèle. Habituellement, il devrait être 'action.mime.renderer', alors comme 'edit.html.haml' devrait être à la fois le nom du fichier et ce que vous envoyez à 'rendre' – AdminMyServer

0

On dirait que vous avez peut-être oublié d'inclure une référence au Javascript bibliothèques dans vos vues, et la vue rend le JavaScript littéral au lieu de l'interpréter.

<%= javascript_include_tag :defaults %> 
+0

Non, je les ai tous inclus, sinon le remplacement ne fonctionnerait pas du tout. –

1

Ou ne pas attraper "répondre à" du tout puisque dans les deux cas Vous faites la même chose! Tout en commentaire:

respond_to do |format| 
    format.html 
    format.js { render :action => "edit" } 
end 
+0

Voilà comment je l'ai essayé au début, mais cela n'a pas fonctionné aussi bien ... –

1
:script => true 

Ajoutez ceci à l'appel link_to_remote et il devrait rails d'évaluer tous les scripts retournés, plutôt que de les produire en texte brut.

0

Lorsque vous répondez à une requête js, render :action => "edit" va essayer de rendre edit.rjs, un 'template' rjs, pas edit.haml, un template html. Supprimez l'option: update de votre tag RJS.

0

J'en avais un là-bas et quand j'essayais de l'insérer, il affichait le JS retourné par la méthode et ne l'exécutait pas sur le DOM. Donc, il déployait => try {...}

Je l'ai: attribut de mise à jour de ma déclaration de link_to_remote à mon avis, un bloc utilisé render: update do |page| page.insert_html(...) end et exécuté JS retourné au lieu de l'afficher.

Espérons que cela aide.

Questions connexes