被人问到 before_save 和 before_create 的,听他的意思起始问得是 save 和 create 的区别。
于是看了下源码
def save(*)
begin
create_or_update
rescue ActiveRecord::RecordInvalid
false
end
end
save 是调用 create_or_update 方法
def create_or_update
raise ReadOnlyRecord if readonly?
result = new_record? ? create : update
result != false
end
new_record?方法判断记录是否不在数据库中,若数据库中没有,则返回 true
所以在 create_or_update 方法中,若数据库中无此记录,则是 create,若有则用 update