ruby-on-rails - ActiveRecord 对象的 Ruby dup 方法

标签 ruby-on-rails ruby-on-rails-3 activerecord

有人可以解释一下 AR 对象的这种行为吗:

u = User.first
uu = u.dup

uu == u  #=> true
u == uu  #=> false

为什么后者不正确?

最佳答案

这是因为ActiveRecord::Base#==如果第二个对象是新记录,则返回 false。由于uu.new_record?true,当执行u == uu时它返回false;但 u.new_record?false,因此 uu == u 不会使该检查失败。

自 Rails 3.0 以来,此行为已发生变化,在 Rails 3.2 中,u == uuuu == u 都将返回 false(并且可能是 3.1)。

关于ruby-on-rails - ActiveRecord 对象的 Ruby dup 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343073/

相关文章:

ruby-on-rails-3 - 如何为验证数字子选项自定义错误消息?

ruby-on-rails - 使用 STI 的 Rails 应用程序——获取这些记录的最简单方法?

activerecord - Yii2事件记录模型不保存数据

ruby-on-rails - 如何找出哪个 Ruby gem 劫持了 ActiveRecord 关联方法

mysql - Ruby on Rails 无法连接到 mysql 数据库

ruby-on-rails - 获取嵌套参数

ruby-on-rails - 我的 rails 路径及其路由出现奇怪的问题

ruby-on-rails - created_at 和 updated_at 列来自哪里?

ruby-on-rails - 根据属性值从 Ruby 中的数组中删除/删除对象

ruby-on-rails - capistrano 从一个本地目录部署到另一个