2010-02-23 10 views
1

J'utilise le plugin "in_place_editing" pour les rails afin de rendre un formulaire avec des modifications sur place. Les choses fonctionnent bien tant que le modèle par défaut est choisi par rails (aucune méthode 'render' n'est invoquée dans le contrôleur), mais elles tombent en panne quand j'essaye de rendre un partial en utilisant l'appel "render: partial => 'partial_name'". Est-ce un problème connu (in_place_edit ne fonctionne pas avec les partiels?) Ou est-ce que je manque quelque chose? Je reçois l'erreur suivante tout en rendant la partie:Comment utiliser le plugin in_place_edit pour les rails avec partiels?

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 
.../vendor/plugins/in_place_editing/lib/in_place_macros_helper.rb:74:in `in_place_editor_field' 

Répondre

1

Vous ne fournissent pas assez d'informations approcher dans votre question, donnant seulement deux lignes de la rétrospection et aucun fragment de la vue qui fonctionne, ou les partielle qui n'a pas. Cela signifie que toute tentative de vous répondre doit être basée en grande partie sur des conjectures. Cela dit, l'assistant d'édition sur place n'est qu'une méthode d'aide comme les autres, rien de spécial. Vous pouvez l'appeler à partir de n'importe quel composant de vue. Il est très probable que la façon dont cette vue est incluse par le contrôleur, ou même une vue parente, n'est pas la raison pour laquelle elle échoue.

La méthode auxiliaire se plaint d'une valeur nil. Cela signifie que très probablement, votre partiel appelle in_place_editor_field et lui transmet des valeurs qui ne sont pas définies dans le partiel. Assurez-vous qu'il n'utilise pas de variables locales qui ne sont pas définies, par rapport à celles utilisées dans la vue où votre appel in_place_editor_field fonctionne; vérifiez qu'il ne demande pas non plus différentes variables d'instance. Selon toute probabilité, vous trouverez les vues qui fonctionnent utilisent un nom de variable tandis que le partiel que vous avez essayé de rendre utilise un autre.

Le mécanisme render :partial => ... prend en charge différentes manières de passer explicitement des valeurs au partiel; vous pouvez choisir de les utiliser pour clarifier votre code. Voir les :locals et :object des options pour la section "Rendu partials" de la documentation rendu dans l'API Rails à:

+0

Mes excuses pour le manque d'information. Mais j'essayais d'utiliser le plugin in_place_editing juste après avoir lu le README qui a essentiellement 2 lignes (une pour le changement dans le contrôleur et l'autre dans la vue). Ce que je réalise maintenant est une grosse erreur! J'ai découvert que le plugin a besoin d'une variable d'instance avec le nom exact en tant que modèle défini pour que cela fonctionne. Je souhaite que le fichier README soit un peu plus explicite (peut-être une troisième ligne sur la définition de la variable d'instance). Merci pour votre réponse, vous avez parfaitement saisi l'erreur avec juste l'information que j'ai donnée :) – Raghu

+0

Yep. Malheureusement, Rails est très inégal pour la documentation. Le noyau est assez bien couvert maintenant - Rails Guides était un grand pas en avant - mais la même chose ne peut pas être dite pour beaucoup de plugins et de gemmes connexes. Votre problème particulier est dû à l'une des nombreuses erreurs d'API dans le plugin d'éditeur in situ d'origine. J'ai écrit un remplaçant pour contourner une énorme vulnérabilité XSS qu'il avait auparavant et il a encore quelques fonctionnalités qui manquent au plugin de base. Bougie éhontée: http://rubyforge.org/projects/safeinplaceedit/ –

0

Je travaille sur un projet de maintenance qui est dans des rails 2.3.8 . Et cette question a mangé beaucoup de mon temps

Dans la vue, changer la vue d'avoir une variable d'instance:

@batch = batch 

in_place_editor_field :batch, 'priority'