我有以下代码:为什么“创造!做”在这个模型中起作用而不是“新!做”?
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