2010-03-22 4 views
35

J'ai un modèle User.comment ajouter des données à la base de données de la console rails

>> @u = User.new 
=> #<User id: nil, userid: nil, password: nil, created_at: nil, updated_at: nil, user_first_name: nil, user_last_name: nil, user_status: nil, user_type: nil> 

Je ne suis pas en mesure d'ajouter des données à la table Users de la console. Je fais ce qui suit:

>> @u.userid="test1" 
=> "test1" 
>> @u.password="test2" 
=> "test2" 
>> @u.user_first_name="test3" 
=> "test3" 
>> @u.user_last_name="test4" 
=> "test4" 
>> @u.user_status="test5" 
=> "test5" 
>> @u.user_type="test6" 
=> "test6" 
>> @u.save 
NoMethodError: undefined method `userid' for nil:NilClass 

Qu'est-ce que je fais mal? Je veux simplement ajouter une ligne de données à l'application.

+3

+2 et pas de réponse. ce n'est pas très SO :) –

+2

Vous avez "id: nil, userid: nil". Pourquoi 2 ID? L'ID utilisateur est-il vraiment une chaîne? Pourriez-vous poster votre modèle? – James

+1

'userid' sent le poisson pour moi, ce n'est pas très rails-esque. Pouvez-vous poster tous les attributs du modèle s'il vous plaît? – Kezzer

Répondre

2

J'ai essayé de créer une nouvelle application rails, et je peux faire ce qui suit:

irb(main):008:0> u= User.new 
=> #<User id: nil, name: nil, created_at: nil, updated_at: nil> 
irb(main):009:0> u.save 
=> true 
irb(main):011:0> User.find(3) 
=> #<User id: 3, name: nil, created_at: "2010-03-22 11:51:31", updated_at: "2010-03-22 11:51:31"> 

Les mêmes œuvres au lieu de créer avec de nouveaux. Je suppose que votre modèle d'utilisateur veut avoir une relation avec un autre objet qui n'est pas encore disponible. Pourriez-vous fournir votre schéma actuel (situé dans db/schema.rb)?

mine est à la recherche comme ça:

ActiveRecord::Schema.define(:version => 20100322114826) do 

    create_table "users", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

end 
17

Essayez de vérifier si l'instance que vous créez est valide. Le plus simple est d'utiliser la sauvegarde! méthode ...

@u.save! 

Cela entraînera une exception à soulever si l'instance ne passe pas toutes les validations, ou si d'autres problèmes se trouvent. La trace de la pile fournira alors, espérons-le, quelques informations utiles.

En outre, au lieu d'utiliser @u = ... essayer en utilisant seulement u = ...

49
>> u = User.create :userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype" 
Questions connexes