解决方法
它在Rails 2.3(又名“今天”)中如何工作
save
电话create_or_update
看起来像这样:
def create_or_update raise ReadOnlyRecord if readonly? result = new_record? ? create : update result != false end
您可以忽略此方法的第一行,因为它只会在记录为只读方式时引发错误(通常不是,但在连接的情况下可能是).我们在这里感兴趣的是方法中的第二和第三行.
第二行呼叫new_record?
,定义如下:
# 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设置为initialize
(新调用初始化,并给我们一个新对象,这里的一些背景Ruby-fu)方法被调用.
所以如果这个@new_record是真的,它会调用create
,如果它是假的,它会调用update
,这使我们得到你所追求的,我想.
此外,当您找到记录时,它不调用initialize,因此不设置@new_record.如果你注意到,new_record背后的代码?是@new_record ||如果没有设置@new_record,则返回false.
比方说,你想找到最后一个论坛记录,所以你可以做Forum.last.
>这个调用last
方法在Forum类上继承自ActiveRecord :: Base
>上一个calls的find
类方法.
>找到calls find_last
> find_last calls find_initial
> find_initial calls find_every
> find_every calls find_by_sql
>和find_by_sql
电话instantiate
你会在这里看到,这个变化没有地方是@new_record设置,因此通过find获得的任何记录都不会是新的记录.
希望这有助于您理解.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。