我有一个seeds.rb文件,出于某种原因,这不起作用:
#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']})
是否有任何理由可行,有人无法理解?从rails console,第一个确实有效吗?验证会有任何差异吗?我运行'rake db:seed'所以认为验证将在两者中生效。
THX
编辑#1
抱歉缺少信息。每个错误“密码不能为空”,但它会回显密码。嗯...
答案 0 :(得分:0)
通过查看验证错误了解发生的情况:
else
puts "that did not save because " + u.errors.join(' ')
end
修改现在你已经添加了验证错误包含'password cant be blank'
并且仍然无法保存,很明显User.create()
执行了很多事情User.save()
{1}}省略。
缺少的是生成密码哈希 - 因此blank password
错误。
答案 1 :(得分: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
打印模型的整个状态,这应该提供一种更清晰的方式来查看正在发生的事情。最后,在保存结束时添加一个爆炸!
将导致它“快速失败”并立即给您错误。