2011-08-11 27 views
12

我有一个用户可以有0或1个配置文件。在我的控制,我要保存配置文件,如果某些值给出如下:ActiveRecord关系中的构建和创建方法有什么区别?

# PUT /users/1 
def update 
    @user = User.find(params[:id]) 

    if @user.update_attributes(params[:user]) 
    if params[:profile][:available] == 1 #available is a checkbox that stores a simple flag in the database. 
     @user.create_profile(params[:profile]) 
    end 
    else 
    #some warnings and errors 
    end 
end 

我想知道的部分是create_profile,神奇create_somerelationname。这与魔术build_somerelationname相比如何?我应该什么时候使用哪个?

回答

17

buildcreate之间的区别在于,create还会将创建的对象保存为build,只会返回新创建的对象(不保存它)。

该文档有点隐藏起来here

因此,根据您是否满意返回的对象,您需要create(因为您不会再更改它)分别为build,因为您希望在再次保存前更新它(这会节省您的保存操作)

+0

链接不指向正确的地方... – mahatmanich

+0

@mahatmanich感谢提及,我已更新链接。 – Veger

6

guide

build_association(属性= {})

的build_association方法返回一个新对象o f关联的 类型。该对象将从传递的属性实例化,并且通过其外键的链接将被设置,但关联的 对象将不被保存。

create_association(属性= {})

的create_association方法返回关联 类型的新对象。这个对象将从传递的属性实例化,并且通过其外键的链接将被设置。另外, 关联的对象将被保存(假设它通过了任何 验证)。

你应该使用什么取决于要求。通常在新方法中使用build_association

相关问题