2014-03-26 86 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