我有以下代碼:爲什麼「創造!做」在這個模型中起作用而不是「新!做」?
user.rb:
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["name"]
# Add an error message when email is already taken
user.email = auth["info"]["email"]
user.password = user.password_confirmation = SecureRandom.urlsafe_base64(n=6)
end
end
sessions_controller.rb:
def omniauth_create
auth = request.env["omniauth.auth"]
user = User.from_omniauth(env["omniauth.auth"])
if user.save
sign_in user
redirect_back_or user
else
#session[:omniauth] = request.env['omniauth.auth'].except('extra')
redirect_to signup_path
flash.now[:error] = 'Worked!'
end
end
下面這段代碼不會因爲create! do
在用戶工作模型保存用戶,並在執行到達控制器並通過if語句之前拋出錯誤。所以我想用new! do
代替,但得到這個:
undefined method `new!' for #<Class:0xb5aaf04>
爲什麼!「創建辦」的工作不是「新做的!」?
(我採取了錯誤的方式來解決這個問題嗎?如果是這樣,什麼其他的解決方案,我可以申請嗎?)
謝謝!爲了答案,但如果我想要「保存」呢?在會話控制器的if語句中?那可能嗎? – alexchenco
我已經在'create!'和'save!'結尾添加了對bang標誌的解釋。 – Ryan
如果你在會話控制器中使用'save!',那麼'else'塊就沒用了。 – Ryan