Rails - 为什么一个工作而另一个工作?

时间:2011-10-26 02:39:23

标签: ruby-on-rails ruby-on-rails-3

我有一个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
抱歉缺少信息。每个错误“密码不能为空”,但它会回显密码。嗯...

2 个答案:

答案 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打印模型的整个状态,这应该提供一种更清晰的方式来查看正在发生的事情。最后,在保存结束时添加一个爆炸!将导致它“快速失败”并立即给您错误。