2012-05-18 4 views
1

J'ai ajouté une vue supplémentaire à l'un de mes objets, ainsi qu'une méthode et l'itinéraire correspondant, mais je ne peux pas charger la vue:Méthode non trouvée, mais la méthode est là

NoMethodError in Scans#parse 

Showing J:/code/vsdb/app/views/scans/parse.html.erb where line #18 raised: 

undefined method `parse' for #<Scan:0x23b0590> 
Extracted source (around line #18): 

15: 
16: <div class="field"> 
17:  <%= s.label :parse %><br /> 
18:  <%= s.text_field :parse %> 
19: </div> 
20: <% end -%> 

Voici la méthode le contrôleur de balayage. La méthode est là, donc je ne comprends pas à quoi le message d'erreur se plaint vraiment. J'ai essayé de redémarrer le serveur. Je prévois de faire plus avec cette méthode, je veux juste qu'il montre la vue pour le moment.

def parse 
    @scan = Scan.new 
end 
+0

Le formulaire recherche un attribut de modèle appelé 'parse' sur votre modèle de numérisation. Vous ne savez pas ce que vous essayez de faire, mais pour que cela fonctionne, vous devez ajouter une colonne de base de données 'parse' à votre table' scans'. – Mischa

+0

* Voici la méthode dans le contrôleur de balayage * - il doit être dans votre modèle, pas dans le contrôleur! – jdoe

Répondre

1

L'erreur est de se plaindre de l'analyse de ne pas être une méthode de votre modèle de balayage (pas votre contrôleur). Dans ce contexte, parse sera une méthode définie automatiquement par Rails pour l'un des attributs de Scan, mais dans ce cas, il est manquant.

Si vous avez ajouté un attribut appelé analyser pour analyser à l'aide d'une migration, vous devrez peut-être exécuter rake db: migrate.

1

Généralement, les vues Rails ne peuvent pas accéder aux contrôleurs. Si vous avez une méthode de contrôleur qui doit être appelée, vous devez le faire dans l'action avant de passer le contrôle à la vue.

Dans votre cas, vous avez une variable appelée @scan qui est une instance de la classe Scan. C'est ici que la vue essaie de trouver la méthode.

Comme indiqué dans les commentaires, vous pouvez contourner cette restriction en déclarant des méthodes spécifiques en tant que méthodes 'helper', ce qui les expose à la vue.

ScanController < ApplicationController 

    helper_method :parse 

    def parse 
    @scan = Scan.new 
    end 

    ... 

end 
+0

* Les vues Rails ne peuvent accéder aux contrôleurs * que si vous avez appelé 'helper_method' sur l'une de ses méthodes. – jdoe

+0

Bon point, j'ai mis à jour ma réponse pour refléter cela. –

Questions connexes