2016-07-20 8 views
1

これについての最善の方法についてはわかりません。Postgres JsonのためのRailsカスタム検証

フィールドの容量がPostgresのjsonbデータ型であると仮定して、キーの値が存在することを検証する必要があります。つまり私は、JSONはそれらの値の両方なしで来る場合、エラーがスローされていること(Railsのバリデーションを使用して)確認する必要があり

{ reception: "", dinner: "" } 

入力した:私のフォームでは、私はに容量を初期化しています

{ 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] = nilのハッシュループ内で間違っていることに気づきます。 – power

関連する問題