对于此给定类,以下两个片段之间是否有区别?update_attributes与直接设置为nil的区别
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}
对于此给定类,以下两个片段之间是否有区别?update_attributes与直接设置为nil的区别
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}
在幕后,他们基本上都在做同样的事情,如果您只是将地址字段设置为零。
片段2受制于质量保证。 More details are in the Rails security guide. Snippet 2 skips validations and callbacks.
代码段2不会跳过验证和回调。只有在使用单个'update_attribute'而不是'update_attributes'时,验证/回调skippage才会发生。 – BaronVonBraun
另外,它不受海量任务的限制,因为他只将地址作为参数传递。 – ADAM
他们之间没有任何区别。如果你已经使用了my_obj.update_attributes(params [:my_object]),那么Spikes的回答在你处理质量分配时是正确的,但是在代码片段2中,你只更新地址属性,因此它们是相同的。
这就是我的想法。那么my_obj.update_attributes {address_id:nil}呢?这将会遇到关系如何保存的问题吗?我们注意到我们似乎无法确定的一些片状。 – chrishomer
你在这里得到的东西很简单,不太可能是你问题的根源。你看到了什么样的片状? –
仅当外键字段设置为零而地址访问器不设为零时,有时地址不会被清除。 – chrishomer