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?
我有两个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?