2009-09-29 21 views
0

J'ai créé un échafaudage de base pour un modèle Foo avec une seule propriété - bar: StringNoMethodError en échafaudage de base View?

foos/new.html.erb:

<h1>New foo</h1> 

<% form_for(@foo) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :bar %><br /> 
    <%= f.text_field :bar %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', foos_path %> 

Mais je reçois un NoMethodError pour mon « bar 'propriété:

NoMethodError in Foos#new 

Showing app/views/foos/new.html.erb where line #8 raised: 

undefined method `bar' for #<Foo id: nil, created_at: nil, updated_at: nil> 

Extracted source (around line #8): 

5: 
6: <p> 
7:  <%= f.label :bar %><br /> 
8:  <%= f.text_field :bar %> 
9: </p> 
10: <p> 
11:  <%= f.submit 'Create' %> 

Comme vous pouvez le voir, bar la seule propriété dans mon modèle Foo:

class CreateFoos < ActiveRecord::Migration 
    def self.up 
    create_table :foos do |t| 
     t.String :bar 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :foos 
    end 
end 

Et la nouvelle méthode dans le foos_controller est de l'échafaudage par défaut:

def new 
    @foo = Foo.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @foo } 
    end 
    end 

Toutes les idées seraient appréciées

Répondre

1

Il semblerait que vous avez capitalisées le mot String dans votre migration db Essayez avec un minuscule s et forcer la migration à courir (rake db:migrate:redo, en supposant que ce dernier était votre migration, sinon utilisez

rake db:migrate:down VERSION=29843923 && rake db:migrate:up VERSION=29843923 

où 29843923 est votre horodatage de migration.).

+0

J'ai essayé cela mais quand j'ai vérifié la base de données il n'y avait aucune colonne de barre. Pensez que je vais supprimer ce projet et recommencer. – toma