2011-10-26 46 views
1

我有一个seeds.rb文件,出于某种原因,这不起作用:Rails - 为什么一个人工作,而不是另一个?

#doesn't work 
u=User.new 
u['email']=h['email'] 
u['password']=h['password'] 
puts u['email'] 
puts u['password'] 
if u.save 
    puts "that saved" 
else 
    puts "that did not save" 
end 

但确实:

#does work 
User.create({:email => h['email'], :password => h['password']}) 

是否有任何理由一部作品和一个不?从轨道控制台,第一个工作?验证会有什么不同吗?我运行'rake db:seed',所以会认为验证会在两者中生效。

THX

编辑#1
抱歉缺乏信息的。每一个“密码不能为空”的错误,但它然后回应出密码。嗯......

+0

你是什么意思“不起作用?”有没有错误,还是只是没有保存?如果是后者,请检查'u.errors'的内容。 –

回答

0

找出什么是通过观察验证错误发生:

else 
    puts "that did not save because " + u.errors.join(' ') 
end 

编辑:现在你已经补充说验证错误包含'password cant be blank',它仍然无法保存,就变成明确User.create()做了一些User.save()省略的事情。

缺少的是代您的密码散列 - 因此blank password错误。

+0

每一个“密码不能为空”的错误,然后继续输出密码。 – timpone

0

试试这样说:

u = User.new 
u.email = h['email'] 
u.password = h['password'] 
puts u.inspect 
if u.save! 
    puts "that saved" 
else 
    puts "that did not save" 
end 

相信u对象的访问属性作为u['password']的方法指导你错了。

此外,做一个u.inspect打印模型的整个状态,并应提供一个更清晰的方式来看看发生了什么。最后,在保存结束时添加一个爆炸!将导致它'快速失败',并立即给你错误。

相关问题