【问题标题】:Rails custom validation for Postgres Json fields针对 Postgres Json 字段的 Rails 自定义验证
【发布时间】:2016-07-20 09:51:34
【问题描述】:

不确定解决此问题的最佳方法。

假设我有字段容量,它是 Postgres jsonb 数据类型,我需要验证键是否存在值。在我的表格中,我正在初始化以下能力:

{ reception: "", dinner: "" }

我需要确保(使用 Rails 验证)如果在没有输入这两个值的情况下进入该 json,则会引发错误,即:

{ reception: "1000", dinner: "300" }

最好的方法是什么?我可以在客户端毫无问题地做到这一点,但想要一个后备服务器端。服务端的容量永远不会为零,因为我已经像上面那样初始化了它,所以不能只调用正常的存在验证。

这样的事情可以接受吗?还是有更好的方法?

def capacities_has_values
  if capacities.present?
    check_capacities(capacities)
  end
end

def check_capacities(capacities)
  capacities.each do |k, v|
    if k[v] != nil
      errors.add(:capacities, "Please add #{k.to_s} capacity") unless k[v].is_integer?
    end
  end
end

谢谢

ETA 这样做:

class String
  def is_integer?
    self.to_i.to_s == self
  end
end

【问题讨论】:

    标签: ruby-on-rails json postgresql validation


    【解决方案1】:

    您的代码看起来不错,但我查看时发现某些条件不正确,这是更正后的 check_capacities 方法。

    我假设容量 = { 接待:“1000”,晚餐:“300”}

    def check_capacities(capacities)
      capacities.each do |k, v|
        unless v.present?
          errors.add(:capacities, "Please add #{k.to_s} capacity")
        else
          errors.add(:capacities, "Please add #{k.to_s} capacity in numbers") unless v.to_i.is_integer?
        end
      end
    end
    

    【讨论】:

    • 好的,还要注意你的 k[v] != nil 在哈希循环中是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多