2016-07-20 138 views
1

不確定有關此最佳方式。Rails自定義驗證Postgres Json字段

假設我有字段容量,這是一個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 

回答

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 
+1

OK,還注意到自己的K [V] =零是錯誤的散列循環中! – power