2014-01-16 27 views
1

如何在數組元素上應用驗證,以便它可以引發一個不能爲空的錯誤?數組在rails 4中的驗證

validates :my_arr , presence: true 

它會檢查[" "].present?將返回true。但我需要檢查它的元素my_arr.last

我已經實現了以下一個在我的模型:

if self.dma_area.last.blank? 
    errors.add(:dma_area, "should be selected") 
end 

我曾與很多其他的選項都試圖像(allow_blank: falseexclusion等),我發現上面一個是工作,但我懷疑它是否符合鐵路標準。

根據rails標準/慣例,以上解決方案是否合適。

等待良好的工作解決方案。

回答

1

您可以做的是使用before_validation回撥並拒絕陣列中的所有無效值。由於你的正常驗證應該工作正常。

,您可以嘗試這樣的:

validates :my_arr , presence: true 

before_validation :reject_invalid_values_from_my_arr 
... 

===================== 
= Protected methods = 
===================== 
protected 
    def reject_invalid_values_from_my_arr 
    self.my_arr = my_arr.compact.reject{|value| value.blank?} 
    end 
... 
2
validates :presence_of_last_element 
... 

private 
... 
def presence_of_last_element 
    unless my_arr.last.present? 
    errors.add(:my_arr, "should not contain empty elements") 
end