我有一个简单的用户模型,其中包含名称和设置。每次保存用户后,AREL都会对设置列执行更新。例如:
user = User.find_by_name('kevin')
user.save
(0.3ms) UPDATE "users" SET "updated_at" = '2011-10-20 19:58:06.363541', "settings" = '--- {}' WHERE "users"."id" = 1
调用save时,没有其他字段更新。这是预期的行为吗?为什么要执行更新?如果序列化内容没有改变,是否可以关闭不更改?我上传了用于创建最小案例的示例项目:
答案 0 :(得分:8)
这是预期的行为。检测序列化属性中的更改非常困难,因此每次保存时都会更新它们。
考虑以下(ruby 1.8.7)irb会话:
ruby-1.8.7-p352 :001 > x = "--- \n:b: 2\n:a: 1\n"
=> "--- \n:b: 2\n:a: 1\n"
ruby-1.8.7-p352 :002 > y = "--- \n:a: 1\n:b: 2\n"
=> "--- \n:a: 1\n:b: 2\n"
ruby-1.8.7-p352 :003 > x == y
=> false
ruby-1.8.7-p352 :004 > YAML.load(x) == YAML.load(y)
=> true