2016-06-07 78 views
0

我通过迈克尔·哈特尔的轨道书的工作,我很好奇它是如何工作:为什么以这种方式使用“if @ user.save”?

if @user.save 

else 

end 

在if语句,这种观点实际上并没有做任何事情,除了多返回true或false。

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

回答

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

但在我看来,如果@ user.save也在进行保存 - 它将模型保存到数据库,然后返回true –

+0

正确。 '@ user.save'将保存该对象,并且只有在没有错误的情况下保存时才返回true,如果有错误,则返回false。这使您可以根据数据库保存是否成功来编写逻辑。 http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save – danielrsmith

+0

我想我只是更习惯于如果陈述的参数只是一个变量,存储真或假 –

2

据迈克尔哈特尔,因为它是在第6章描述的,如果它成功和否则为false的节省方法返回true。

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

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

相关问题