0

在Proc我想驗證所提供的語句返回true。一行自定義驗證

我試過如下:

validate :home, Proc.new { |c| c.home.kitchen.present? } 

它不工作。當沒有廚房時,它不顯示驗證錯誤。

我必須把它寫這樣的:

validate :home_kitchen_must_be_present 

def home_kitchen_must_be_present 
    .... 

還是有一個可用的語法把它寫在同一行?感謝

+0

什麼rails的版本,您使用的? –

+0

首先,您需要向對象添加錯誤以使其失效。第二,這裏的「家」和「廚房」是什麼?驗證是針對屬性(db中的列)。這是你模型的兩個不同屬性嗎?也許你可以向我們展示你的模式,並更多地解釋你想在這裏實現什麼。 – EJ2015

+0

我建議發佈您的模型關聯和/或架構。看起來您正在嘗試驗證添加/更新可能需要自定義驗證方法的主對象時是否存在嵌套對象。如果廚房是桌子內部的柱子,那麼它是一個完全不同的蠕蟲罐頭。我們只需要知道你在做什麼。 –

回答

0

使用PROC

驗證:家,存在:true,如果:Proc.new {| C | c.home.kitchen.present?使用}

的方法:

validates :home, presence: true, if: :home_kitchen_must_be_present 

def home_kitchen_must_be_present 
    true # do your checking and return true or false 
end 
+0

'validates'是Rails驗證器(如果這就是你所做的,那麼定製驗證器類以Validator結尾),'validate'是你的自定義驗證器方法。 –

+0

@Зелёный我知道驗證和驗證的區別。現在,當我的代碼能夠實現他想要的功能時,有什麼問題? – krishnar

+0

'validates:home,如果:...'不起作用並且引發錯誤,因爲它至少需要一個驗證器,比如'presence'或'length'或其他。 '驗證:家,存在:真,如果:......這是有效的。檢查你的代碼。閱讀指南http://guides.rubyonrails.org/active_record_validations.html –