if SOMETHING
charge = Object (this object has a method ID)
end
DiffObject.update_attributes(specific_attribute: charge.id)
但很明显,如果SOMETHING
未评估为true
,那么我不需要更新任何内容,或者就我而言,我认为运行{可能更容易{1}} update_attributes
所以我现在所拥有的是:
specific_attribute:nil
但有些东西告诉我,有更好的方法可以做到这一点
答案 0 :(得分:0)
如果您不知道charge
是否为nil
,则可以使用try
安全地访问该ID。如果电荷存在,它将返回id,如果电荷为零,则返回nil,没有错误。
DiffObject.update_attributes(specific_attribute: charge.try(:id))
方法update_attributes
,update
,save
等只会在实际更改后保存记录,因此您无需亲自检查。只需保存它,让ActiveRecord弄清楚其余部分。
答案 1 :(得分:0)
ActiveSupport
的核心扩展为几乎每个对象提供了一个方便的方法try
。
尝试(* a,& b)
调用名称作为第一个参数的公共方法,就像public_send一样,但是如果接收者没有响应它,则调用返回nil而不是引发异常。
例如,您可以使用change.try(:id)
。如果change
为nil
或某些内容未响应id
,则返回nil
,否则返回ID。
有关详细信息,请参阅RailsGuide和Rails API doc。