如何在 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.
几个月前,我问了一个关于如何在创建之前按字母顺序递增字段值的问题。
经过一些评论,我们达成了一个非常
目前的问题是我不知道如何将创建的 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.