2014-03-26 87 views
2

我有一個模型,如果它是我從其他人的API獲得的數組的一部分,我想驗證該名稱。Rails 4驗證不起作用

class Model < ActiveRecord::Base 
    validate :exists_at_api? 

    def exists_at_api? 
    api_data.detect { |d| d == self.name } 
    end 
end 

的問題發生在我發送無效數據

驗證被調用,並返回false,但模型仍保存。

我也嘗試了上述的這種變化,具有相同的結果:

validate :name, if: :exists_at_api? 

我敢肯定,這是簡單的東西,可有人點我在正確的方向?

回答

4

你需要添加一些東西到errors散列表示失敗。有關詳細信息和示例,請參閱the Rails documentation

試着這麼做:

validate :exists_at_api? 

def exists_at_api? 
    if api_data.detect { |d| d == self.name } 
    errors.add(:name, "can't be whatever...") 
    end 
end 
+0

哦,對了,這是有道理的。 – Eugene

+0

應該是'unless api_data.detect {| d | d == self.name}' – usha

+0

我懂了,我會盡快接受答案 – Eugene