Ruby on rails 更新_属性和直接设置为nil之间的区别

Ruby on rails 更新_属性和直接设置为nil之间的区别,ruby-on-rails,ruby,associations,Ruby On Rails,Ruby,Associations,对于这个给定的类,以下两个代码段之间有区别吗 class MyObjectClass < ActiveRecord::Base belongs_to :address end # Snippet 1 my_obj.address = nil my_obj.save # Snippet 2 my_obj.update_attributes {address: nil} class MyObjectClass

对于这个给定的类,以下两个代码段之间有区别吗

class MyObjectClass < ActiveRecord::Base
  belongs_to :address
end

# Snippet 1
my_obj.address = nil
my_obj.save

# Snippet 2
my_obj.update_attributes {address: nil}
class MyObjectClass
代码片段2受批量分配安全性的约束。代码段2也受批量分配安全性的约束。Snippet 2也在幕后,如果你只说将地址字段设置为零,那么它们实际上是在做同样的事情。

在幕后,如果你只说将地址字段设置为零,那么它们实际上是在做同样的事情。

它们之间没有任何区别。如果您使用了my_obj.update_属性(params[:my_object]),那么尖峰回答将是正确的,因为您正在处理批量分配,但是在代码段2中,您只是更新地址属性,使它们完全相同。

它们之间没有任何区别。如果您使用了my_obj.update_属性(params[:my_object]),则在处理批量分配时,尖峰回答是正确的,但是在代码段2中,您只更新地址属性,使其相同。

代码段2不会跳过验证和回调。验证/回调跳过仅在使用单数
update\u属性时发生,而不是
update\u属性时发生。此外,它不受批量分配的影响,因为他仅将地址作为参数传递。snippet 2不会跳过验证和回调。验证/回调跳过仅在使用单数
update\u属性时发生,而不是
update\u属性时发生。此外,它不受批量分配的影响,因为他只将地址作为参数传递。这就是我的想法。那我的_obj.update_属性{address_id:nil}呢?这种关系在如何保存方面会遇到问题吗?我们已经注意到一些我们似乎无法确定的片状物。你在这里得到的是非常简单的,不可能是你问题的根本原因。你看到的是什么样的片状?有时,当只将外键字段设置为nil而不将地址访问器设置为nil时,地址不会清除。通常,你希望尽可能多地使用访问器,并将外键字段排除在等式之外。这就是我的想法。那我的_obj.update_属性{address_id:nil}呢?这种关系在如何保存方面会遇到问题吗?我们已经注意到一些我们似乎无法确定的片状物。你在这里得到的是非常简单的,不可能是你问题的根本原因。你看到的是什么样的片状?有时,当只将外键字段设置为nil而不将地址访问器设置为nil时,地址不会清除。通常,你希望尽可能多地使用访问器,并将外键字段排除在等式之外。