Postgres Json字段的Rails自定义验证

时间:2016-07-20 09:51:35

标签: ruby-on-rails json postgresql validation

不确定最好的方法。

假设我有字段容量,这是一个Postgres jsonb数据类型,我需要验证键存在的值。在我的表格中,我将容量初始化为:

{ reception: "", dinner: "" }

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

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

最好的方法是什么?我可以在没有问题的情况下做客户端,但是想要一个后备服务器端。服务器端的容量永远不会是零,因为我已经如上所述初始化它,因此无法调用正常的presence_of验证。

这样的事可以接受吗?或者有更好的方法吗?

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

1 个答案:

答案 0 :(得分:2)

您的代码看起来不错,但在我查看时发现有些条件不正确,以下是更正后的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