如何在 Rails 中创建对象时从 Postgres 计算函数获取值

How to get the value from Postgres computed function upon object creation in Rails

几个月前,我问了一个关于如何在创建之前按字母顺序递增字段值的问题。

经过一些评论,我们达成了一个非常的要求,我现在需要扩展这个解决方案和 return 对象并在创建时将其显示在同一页面上。我需要 Ajax 才能执行此操作。

目前的问题是我不知道如何将创建的 setup_code 附加到创建时 return 编辑的 JSON 对象。

我试过以下方法:

before_validation :find_setup_code, on: :create

def find_setup_code
  self.reload
end

def exposure_setup_code
  self.setup_code
end

def as_json(options)
  super(methods: %i[exposure_setup_code])
end

我们的想法是能够立即访问 data.exposure_setup_code 创建对象而无需重新加载页面。

解决这个问题的正确方法是什么?

您 link 的解决方案是使用 PostgreSQL 函数为相关列提供默认值。这意味着在 SQL INSERT 期间应用默认值,它在数据库中创建模型实例;这发生在 ActiveRecord 验证之后,所以 before_validation 太早了,您希望在创建模型后立即重新加载它。

我想你想说的是:

after_create :reload # Make sure to load database-generated defaults.