代码之家  ›  专栏  ›  技术社区  ›  mayorsanmayor

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

  •  0
  • mayorsanmayor  · 技术社区  · 6 年前

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

    经过几番评论,我们得出了 nice solution 我现在需要扩展这个解决方案,并在创建时返回对象并将其显示在同一个页面上。我需要Ajax来做这个。

    当前的问题是,我不知道如何将创建的设置代码附加到创建时返回的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 立即创建对象,无需重新加载页面。

    正确的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   mu is too short    6 年前

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

    我想你想说:

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