2010-02-17 20 views
2
undefined method `to_sym' for nil:NilClass 

J'ai cette erreur que dans ma page d'édition de mon nifty_scaffold.RoR - Echafaudage - Méthode unedfined « de to_sym » pour nul: NilClass seulement une erreur dans la méthode d'édition

C'est _form.html.erb

<% form_for @progress do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :date %><br /> 
    <%= f.date_select :date %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description %> 
    </p> 
    <p> 
    <%= f.label :weight %><br /> 
    <%= f.text_field :weight %> 
    </p> 
    <p> 
    <%= f.label :fatpercentage %><br /> 
    <%= f.text_field :fatpercentage %> 
    </p> 
    <p> 
    <%= f.label :height %><br /> 
    <%= f.text_field :height %> 
    </p> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 

C'est edit.html.erb

<% title "Edit Progress" %> 
<%= render :partial => 'form' %> 

Et voici mon contrôleur:

class ProgressesController < ApplicationController 
    def new 
    @progress = Progress.new 
    end 

    def create 
    @progress = Progress.new(params[:progress]) 
    if @progress.save 
     flash[:notice] = "Successfully created progress." 
     redirect_to progresses_url 
    else 
     render :action => 'new' 
    end 
    end 

    def edit 
    @progress = Progress.find(params[:id]) 
    end 

    def update 
    @progress = Progress.find(params[:id]) 
    if @progress.update_attributes(params[:progress]) 
     flash[:notice] = "Successfully updated progress." 
     redirect_to progresses_url 
    else 
     render :action => 'edit' 
    end 
    end 

    def index 
    @progresses = Progress.all 
    end 
end 

Quoi de mal? Je n'arrive pas à trouver mon erreur: -S. Il semble que cela: - récupère les données correctement - ne peut pas insérer les valeurs db dans les champs "edit view". J'utilise: float,: string et: date comme types de données dans l'échafaudage.

Juste pour le poste terminé, ceci est mon erreur: NoMethodError # modifier dans Progresse

Showing app/views/progresses/edit.html.erb where line #3 raised: 

undefined method `to_sym' for nil:NilClass 
Extracted source (around line #3): 

1: <% title "Edit Progress" %> 
2: 
3: <% form_for @progress do |f| %> 
4: <%= f.error_messages %> 
5: <p> 
6:  <%= f.label :date %><br /> 

À la ligne 6 du journal des extrémités code ...

Edit: Il semble être une erreur dans mes routes.rb. Ce est actuellement commenté:

map.edit_progress "edit_progress", :controller => "progresses", :action => "edit" 

quand je décommentez, il donne une erreur aussi à mon avis d'index. Pour une raison quelconque, cela s'appelle: 'http://127.0.0.1:3001/progresses/1/edit', ne devrait-il pas être: 'http://127.0.0.1:3001/progresses/edit/1'? Même s'il semble que la "vue d'édition" est appelée ... C'est peut-être la raison pour laquelle les valeurs ne sont pas remplies, à mon avis ...

Quelle pourrait être ma solution?

Répondre

3

Je proposerai deux débogage étape ici:

  1. Retirez tout votre code de la vue de modifier et ajouter un texte ordinaire en elle, puis accédez à votre page dans le navigateur et voir si vous obtenez une erreur ou une nouvelle erreur ou pas d'erreur

  2. Si vous obtenez une nouvelle erreur, il pourrait vous aider à résoudre le problème ou dans votre action de modifier contrôleur augmenter le @progress pour voir si elle est en cours d'

    def edit 
        @progress = Progress.find(params[:id]) 
        raise @progress.inspect 
    end 
    

Ces deux étapes peuvent vous aider à résoudre le problème.

+0

Je ne reçois pas d'erreur lorsque je remplace la "vue d'édition" par du texte brut. et avec raise @ progress.inspect je reçois toutes les valeurs (à savoir: # ) Quelle est la prochaine étape? – NicoJuicy

+0

Avez-vous un ensemble de ressources pour la progression dans votre fichier 'config/routes.rb'? Si ce n'est pas le cas, ajoutez 'map.resources: progresses'. Si cela ne fonctionne pas, essayez de remplacer <% form_for @progress do | f | %> 'avec' <% form_for: progress,: url => {: action => "mise à jour"} do | f | %> 'dans votre vue d'édition – nas

+0

map.resources: progresses est déjà défini. Ma vue d'édition affiche la forme partielle 'formulaire'. Si je remplace votre code par le courant, cela ne fonctionne toujours pas (syntaxError). – NicoJuicy