我有一个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
我在做错了什么?我只是想在应用程序中添加一行数据。
答案 0 :(得分:53)
>> u = User.create :userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype"
答案 1 :(得分:18)
尝试检查您创建的实例是否有效。最简单的方法是使用保存!方法...
@u.save!
如果实例未通过所有验证,或者发现任何其他问题,则会引发异常。然后堆栈跟踪将提供一些有用的信息。
此外,不要仅使用@u = ...
尝试使用u = ...
答案 2 :(得分:4)
我试图创建一个新的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
答案 3 :(得分:0)
u = User.new(:userid => "myuserid", :password => "mypasswd", :user_first_name => "test", :user_last_name => "testovich", :user_status => "mystatus", :user_type => "mytype")
u.save
只需通过这两行,您就可以将数据添加到数据库中。
答案 4 :(得分:0)
您可以从rails控制台输入此权限: User.create(:userid =&gt;&#34; myuserid&#34;,:password =&gt;&#34; mypasswd&#34;,:user_first_name =&gt;&#34; test&#34;,:user_last_name =&gt ;&#34; testovich&#34;,:user_status =&gt;&#34; mystatus&#34;,:user_type =&gt;&#34; mytype&#34;)
我总是喜欢运行:.new所以我可以准确列出我想要添加值的参数。也不是所有的值都需要列出或填写,即 User.create(:userid =&gt;&#34; myuserid&#34;,:password =&gt;&#34; mypasswd&#34;)所有其他值都将为nil值。希望这会有所帮助。
答案 5 :(得分:0)
单线
User.create name: "Mr X", color: "#f20075"
答案 6 :(得分:0)
你也可以使用
@u.valid?
为了检查您的实例是否有效并且不想冒险将错误数据添加到您的数据库中。