child 关联的构建和 "assign" 之间的区别?

Difference between build and "assign" for a child association?

我很好奇使用 "build" 或直接为关联分配 child 有什么区别?

假设我已经有一个@user 实例,我只想创建与组织的child 关联:

方法一:

@organization = Organization.new
@organization.build_user(@user.attributes)

方法二:

@organization = Organization.new
@organization.user = @user

两者做同样的事情,对吧?

如果一个 Organization 有一个 User,那么直接分配一个关联需要 @user 是一个 User 对象才能工作,否则它很容易抛出错误. build 处理关联并自动设置外键。例如

将工作:

@organization.build_user({username: "User"})

将工作:

@organization.user = User.new(username: "User")

不会工作:

@organization.user = {username: "User"}