web-dev-qa-db-fra.com

comment ajouter des données à la base de données à partir de la console Rails

J'ai un modèle User

>> @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 peux pas ajouter de données à la table Users à partir 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. 

38
rails_guy
>> u = User.create :userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype"
53
buru

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

@u.save!

Cela provoquera une exception si l'instance ne réussit pas toutes les validations ou si d'autres problèmes sont détectés. Nous espérons que la trace de la pile fournira des informations utiles.

De plus, au lieu d’utiliser @u = ..., essayez d’utiliser uniquement u = ....

18
Jits

J'ai essayé de créer une nouvelle application Rails et je peux effectuer les opérations suivantes:

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">

Le même fonctionne avec create au lieu de new. 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)?

Le mien ressemble à ç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
4
mliebelt

Vous pouvez entrer ce droit à partir de la console Rails: User.create (: idutilisateur => "monutilisateur",: motdepasse => "mypasswd",: utilisateur_first_name => "test",: utilisateur_last_name => "testovich",: utilisateur_status => "mystatus",: user_type => "mytype")

J'aime toujours lancer: .new afin de pouvoir obtenir une liste exacte des paramètres pour lesquels je souhaite ajouter des valeurs. De plus, toutes les valeurs ne doivent pas nécessairement être répertoriées ou renseignées, à savoir i.e . User.create (: idutilisateur => "idutilisateur",: motdepasse => "mypasswd"), toutes les autres valeurs auront une valeur nulle. J'espère que cela t'aides.

0
charlie.brown
u = User.new(:userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype")
u.save

Simplement par ces 2 lignes, vous pouvez ajouter des données à votre base de données. 

0
bhavna garg