ruby-on-rails – activerecord如何知道执行插入或更新?
也许一些红宝石专家可以看出,在调用save()时,activerecord如何知道进行插入或更新.它背后的逻辑是什么?它是否检查主键是空白还是某些东西,如果是插入,如果不是更新?
解决方法
虽然有些人说“RTFM”可以说是更加漫长而又完全无用的Rails-3-out-and-changes的一切回应:
它在Rails 2.3(又名“今天”)中如何工作
def create_or_update raise ReadOnlyRecord if readonly? result = new_record? ? create : update result != false end 您可以忽略此方法的第一行,因为它只会在记录为只读方式时引发错误(通常不是,但在连接的情况下可能是).我们在这里感兴趣的是方法中的第二和第三行. 第二行呼叫 # Returns true if this object hasn't been saved yet -- that is,a record for the object doesn't exist yet; otherwise,returns false. def new_record? @new_record || false end 而变量@new_record设置为 所以如果这个@new_record是真的,它会调用 此外,当您找到记录时,它不调用initialize,因此不设置@new_record.如果你注意到,new_record背后的代码?是@new_record ||如果没有设置@new_record,则返回false. 比方说,你想找到最后一个论坛记录,所以你可以做Forum.last. >这个调用 你会在这里看到,这个变化没有地方是@new_record设置,因此通过find获得的任何记录都不会是新的记录. 希望这有助于您理解. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |