2009-10-09 8 views
2

J'utilise link_to_remote pour mettre à jour un partial sur ma page. Le problème est que Rails ne trouve pas mon partiel.Modèle manquant après link_to_remote

je spécifie le chemin complet à mon partiel (un fichier html.erb) dans la méthode du contrôleur:

def my_method 
create something 

render :partial => '/shared/partials/my_partial_form', :layout => 'false' 
end 

Je sais la méthode du contrôleur est d'être frappé, car « quelque chose » est créé. J'obtiens l'erreur "Template missing [:controller_name]/[:method_name].js.erb not found". Est-ce que quelqu'un peut expliquer pourquoi Rails semble utiliser un chemin par défaut pour un js.Berb?

Merci d'avance!

+0

Avoir ce problème à la minute. Avez-vous déjà trouvé une solution? –

Répondre

2

Rails répond au format JS. render: partial ne compte pas en tant qu'appel de rendu/redirection de l'action par action. Sans appel de rendu ou de redirection approprié, Rails appellera render avec les arguments par défaut basés sur le format, le contrôleur et l'action. Rendu: partiel renvoie juste le texte à l'appelant, il ne construit pas de réponse. Dans ce cas, le partiel est rendu en HTML, mais rien n'est fait avec. P.S. : layout => L'option false est superflue lors du rendu partiel.

Vous souhaitez utiliser render: update ou les fichiers RJS pour faire de même avec un modèle.

En supposant que vous souhaitez remplacer la page Web entière, la version courte est quelque chose comme ça:

def my_method create something 

    render :update do |page| 
    page.replace_html :body, :partial => '/shared/partials/my_partial_form'  
    end 
end 

La voie RJS vous pouvez créer l'application/vues/ressources/my_method.rjs fichier et remplir avec

page.replace_html :body, :partial => '/shared/partials/my_partial_form' 
+1

Merci pour la réponse. J'ai utilisé link_to_remote pour mettre à jour un div ailleurs dans cette même base de code. Dans ces cas, tant que la dernière ligne de la méthode était render: partial, tout allait bien. Je suis impatient de comprendre ce qui le rend différent. Causes possibles: héritage du contrôleur plugin sur la page J'ai essayé votre première suggestion et elle renvoie la même erreur. En fait, tout ce que j'ai essayé me laisse au même endroit. Le remplacement de: partial par redirect_to root_url ne donne pas non plus de résultats différents. Je vois que c'est parce que les rails ne reconnaissent pas la directive comme valide. –

+0

Lorsque Rails répond à une requête JS, il envoie javascript pour être exécuté dans le navigateur. Toutes les méthodes ruby ​​renvoient le résultat de la dernière instruction. redirect_root_url ne modifie pas le format de la requête, encore une fois, si vous n'indiquez pas explicitement le template pour générer le Javascript, Rails rendra la valeur par défaut. Ce qui explique pourquoi votre erreur ne change pas avec redirect_root_url – EmFi

+0

Cela ne fonctionne pas pour moi. Cela a-t-il fonctionné pour vous logia? –

0

Essayez de supprimer le/en face de partagé.

render :partial => 'shared/partials/my_partial_form', :layout => 'false' 
+0

merci. essayé ça. à ce stade, j'aimerais l'avoir dire une autre erreur - tout autre. sources possibles de différence: héritage du contrôleur -j'ai essayé de placer la méthode dans le contrôleur parent et dans le contrôleur enfant. même erreur - il y a un plugin sur la page pour gérer plusieurs formulaires sur une seule page. –

+0

et my_partial_form est nommé _my_partial_form.html.erb? – Tilendor