if SOMETHING
charge = Object (this object has a method ID)
end
DiffObject.update_attributes(specific_attribute: charge.id)但是很明显,如果SOMETHING的计算结果不是true,那么我不需要更新任何东西,或者在我的例子中,我认为只使用specific_attribute:nil运行update_attributes可能会更容易
所以我现在所拥有的是:
DiffObject.update_attributes(specific_attribute: ((defined? charge) == nil ? nil : charge.id)))但我的直觉告诉我有更好的方法
发布于 2015-10-25 07:03:20
当您不知道charge是否为nil时,可以使用try安全地访问id。如果charge存在,它将返回id,如果charge为nil,则返回nil,没有错误。
DiffObject.update_attributes(specific_attribute: charge.try(:id))方法update_attributes、update、save等只会保存实际发生更改的记录,所以您不需要自己检查。只需保存它,让ActiveRecord解决剩下的问题即可。
发布于 2015-10-25 08:41:30
ActiveSupport的核心扩展几乎在每个对象上都提供了一个方便的方法try。
尝试(*a,&b)
调用名字作为第一个参数的公共方法,就像public_send一样,不同的是,如果接收器不响应它,调用将返回nil,而不是引发异常。
例如,您可以使用change.try(:id)。如果change为nil或不响应id的值,则返回nil,否则返回ID。
详细信息请参见RailsGuide和Rails API doc。
https://stackoverflow.com/questions/33324213
复制相似问题