在我们的 Rails 3.2.6 应用程序中,我们有一个名为“version”的模型属性,每当创建或更新实例(通过触发器)时,该属性都会在数据库级别递增。但是,在我们成功创建或更新后,数据库设置的新值不会返回给我们的实例,除非我们显式执行 instance.reload。
有谁知道在持久化到数据库后让活动记录自动重新加载实例的方法?
背景
在我们的 Rails 3.2.6 应用程序中,我们有 3 个表,每个表都有一个“版本”列。在所有 3 个表中,“版本”整数列需要在每次插入和更新期间递增,并且“版本”绝不能重复。
简单的解决方案:我们在 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 中创建、保存或更新属性时,新的“版本”值不会在记录被持久化后重新加载。