아마 뭔가 같은 :
module ActiveRecord
class Base
def nil!(*names)
unless persisted?
raise ActiveRecordError, <<-MSG.squish
cannot nil on a new or destroyed record object. Consider using
persisted?, new_record?, or destroyed? before nilling
MSG
end
unless names.empty?
changes = {}
names.each do |column|
column = column.to_s
changes[column] = write_attribute(column, nil)
end
primary_key = self.class.primary_key
scope = self.class.unscoped.where(primary_key => _read_attribute(primary_key))
if locking_enabled?
locking_column = self.class.locking_column
scope = scope.where(locking_column => _read_attribute(locking_column))
changes[locking_column] = increment_lock
end
clear_attribute_changes(changes.keys)
result = scope.update_all(changes) == 1
if !result && locking_enabled?
raise ActiveRecord::StaleObjectError.new(self, "nil")
end
@_trigger_update_callback = result
result
else
true
end
end
end
end
가 초기화에 있음을 넣고 당신이 Comment.last.nil!(:title)
에 코멘트의 제목을 null로 드리겠습니다 .
만약'e'가'nil? '이라면'e.reload'는 에러를 발생시킬 것입니다. 당신은'존재하지 않는다면'무엇을 기대하지 않는지 명확히 할 수 있습니까? 레코드를 삭제하고 현재 인스턴스를 nillify? 아니면 기록을 없앨까요? 아니면 ('bar'와 같은) 일부 속성을'nil'으로 설정하면됩니까? – spickermann
'e.bar'를 nil로 설정 하시겠습니까? 그렇다면'e.update (bar : nil)'을 할 수 있습니다. 그러면 속성이 설정되고 한 단계로 모두 저장됩니다. – moveson
사용 사례는 무엇입니까? – Shobhit