ruby - 不调用自定义验证

ruby - custom validation is not called

我有两个class;客户和预订。我的项目只包含 ruby 代码,而不是 rails 项目。

Class reservation 逐行读取批量 json 文件,其中包括客户哈希。

从该散列中,我创建了客户对象。

这是预订中的代码 class。

    def parse_json
        File.open(@filename, "r" ).each do |line|    
            @customers << Customer.new(JSON.parse(line))
        end

        return @customers
    end

在 customer.rb 我有以下内容;

    validates_presence_of :hash
    validate :hash_should_include_all_fields
    attr_reader :name, :userid, :latitude, :longitude, :distance  

    def hash_should_include_all_fields
        puts "I'm here #{hash}"
        if hash.assert_valid_keys('user_id', 'name', 'latitude', 'longitude')
            puts "Valid"
        else
            puts "Not valid"
        end
    end

然而,当我创建客户对象时,hash_should_include_all_fields 方法没有被调用。

我在这里想念什么,如果你能帮忙就太好了。

谢谢

您正在调用 new,它将构建一个 Customer 对象,但什么都不做。

如果对象是 active_record 模型,调用 create!create 也会 运行 验证并将对象写入数据库。

如果您不想将其写入数据库,您可以在使用 new

创建的实例上调用 valid?