gpt4 book ai didi

ruby-on-rails - 可以在创建或更新后自动重新加载实例吗?

转载 作者:行者123 更新时间:2023-11-29 11:35:33 25 4
gpt4 key购买 nike

在我们的 Rails 3.2.6 应用程序中,我们有一个名为“version”的模型属性,每当创建或更新实例(通过触发器)时,它都会在数据库级别递增。然而,在我们成功创建或更新之后,数据库设置的新值不会返回到我们的实例,除非我们明确地执行 instance.reload。

有谁知道在持久化到数据库后让事件记录自动重新加载实例的方法吗?

背景

在我们的 Rails 3.2.6 应用程序中,我们有 3 个表,每个表都有一个“版本”列。在所有 3 个表中,“version”整数列需要在每次插入和更新期间递增,并且“version”绝不能重复。

简单的解决方案:我们在 postgres 中创建了一个所有 3 个表共享的 version_sequence。我们有一个小触发器,它使用 nextval('version_sequence') 值更新这些表中任何记录的版本列:

  -- Resource Version Sequence
CREATE SEQUENCE resource_versions_seq;


-- Resource Version Trigger
CREATE FUNCTION update_resource_version() RETURNS trigger AS $update_resource_version$
BEGIN
NEW.version := nextval('resource_versions_seq');
RETURN NEW;
END;
$update_resource_version$ LANGUAGE plpgsql;

但是,当我们在 active_record 中创建、保存或更新属性时,新的“版本”值不会在记录持久化后重新加载。

最佳答案

使用 after_save 回调怎么样?在此回调中,您可以只获取该字段,然后将其设置在模型上。像这样:

class Thing < ActiveRecord::Base
after_save :refresh_version

def refresh_version
self.version = Thing.find(self.id).select(:version)
end

end

关于ruby-on-rails - 可以在创建或更新后自动重新加载实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com