2011-10-26 64 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打印模型的整個狀態,並應提供一個更清晰的方式來看看發生了什麼。最後,在保存結束時添加一個爆炸!將導致它'快速失敗',並立即給你錯誤。

相關問題