为什么“if @ user.save”以这种方式使用?

时间:2016-06-07 01:50:12

标签: ruby-on-rails ruby activerecord railstutorial.org

我正在阅读Michael Hartl的轨道书,我很好奇这是如何工作的:

if @user.save 

else

end

在if语句中,除了返回true或false之外,参数实际上没有做任何事情。

此方法似乎将模型保存到数据库,然后返回true或false。这是常见的/我是对的吗?为什么我们这样做?

2 个答案:

答案 0 :(得分:4)

通常if @user.save正在检查对象是否已使用ActiveRecord成功保存到数据库。从那里你可以做一些事情,比如设置flash消息并在某处重定向。在else子句中,您可以检查@user.errors以查看出错的原因并进行处理。

示例:

def create
  #Set user object attributes using strong parameters
  @user = User.new(user_params)

  #Attempt to save @user
  if @user.save
    flash[:notice] = 'User saved successfully'
    redirect_to somewhere_else_url
  else
    #Saving failed, we can inspect @user.errors for more information
    flash[:alert] = 'User was not saved.'

    #If using a form library @user.errors will be displayed graphically when rendering the :new action
    render :new
  end
end

答案 1 :(得分:2)

根据Michael Hartl所述,正如第6章所述, save 方法如果成功则返回true,否则返回false。

因此,如果没有错误(如验证),保存方法将成功,并将用户模型存储在数据库中,否则方法将结束并返回false。

您可以参考第6章here并查看第6.1.3节。