如何在Rails控制台中将数据添加到数据库

49

我有一个 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>

我无法从控制台向Users表中添加数据。我正在执行以下操作:

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

我错在哪里了?我只是想向应用程序添加一行数据。


2
你有 "id: nil, userid: nil"。为什么有两个ID?userid真的是字符串吗?你能贴出你的模型吗? - James
1
userid 给我感觉有些可疑,它不是很符合 Rails 的风格。你能把模型的所有属性都发一下吗? - Kieran Senior
7个回答

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

22

尝试检查你创建的实例是否有效。最简单的方法是使用save!方法...

@u.save!

如果实例未通过所有验证或发现任何其他问题,将引发异常。然后,堆栈跟踪将希望提供一些有用的信息。

此外,尝试使用u = ...而不是@u = ...


6

我尝试创建一个新的Rails应用程序,我可以完成以下操作:

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

同样的方法也适用于create而不是new。我猜想你的User模型想要与另一个当前不可用的对象建立关系。请提供你当前的方案(位于db/schema.rb中)。
我的方案看起来像这样:
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

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

仅通过这两行代码,您就可以向数据库添加数据。


0

您也可以使用

@u.valid?

为了检查您的实例是否有效,而不想冒险将错误数据添加到数据库中。


0

您可以直接在rails控制台中输入以下命令: User.create(:userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype")

我通常喜欢运行.new,这样我就可以看到要添加值的确切列表。此外,并不是所有的值都需要列出或填写,例如: User.create(:userid => "myuserid", :password => "mypasswd") 所有其他值都将具有零值。希望这可以帮助到您。


0

一行代码

User.create name: "Mr X", color: "#f20075"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接