加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:18:24 所属栏目:百科 来源:网络整理
导读:在我们的Rails 3.2.6应用程序中,我们有一个名为“version”的模型属性,无论何时创建或更新实例(通过触发器),该属性都会在数据库级别递增.但是,在我们成功创建或更新之后,数据库设置的新值不会返回到我们的实例,除非我们显式执行instance.reload. 有没有人知
在我们的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中创建,保存或update_attributes时,在保留记录后不会重新加载新的“版本”值.

解决方法

如何使用after_save回调?在此回调中,您可以只获取该字段,然后在模型上设置它.像这样的东西:

class Thing < ActiveRecord::Base
  after_save :refresh_version

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

end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读