Ser*_*dis 4 validation ruby-on-rails-3
我希望将值传递给自定义验证.我做了以下测试:
validate :print_out, :parameter1 => 'Hello'
有了这个:
def print_out (input="blank")
puts input
end
Run Code Online (Sandbox Code Playgroud)
创建对象或保存对象时,输出为"空白".但是,如果直接调用:
object.print_out "Test"
而是输出测试.问题是,为什么我的参数没有正确传递?
Ser*_*dis 11
在'config\initializers \'目录中,您可以创建自己的验证.举个例子,让我们创建一个验证'validates_obj_length'.不是一个非常有用的验证,但一个可接受的例子:
在'config\intializers \'目录中创建文件'obj_length_validator.rb'.
ActiveRecord::Base.class_eval do
def self.validates_obj_length(*attr_names)
options = attr_names.extract_options!
validates_each(attr_names, options) do |record, attribute, value|
record.errors[attribute] << "Error: Length must be " + options[:length].to_s unless value.length == options[:length]
end
end
end
Run Code Online (Sandbox Code Playgroud)
一旦你有这个,你可以使用非常干净:
validates_obj_length :content, :length => 5
Run Code Online (Sandbox Code Playgroud)
基本上,我们重新打开ActiveRecord :: Base类并实现新的子验证.我们使用splat(*)运算符来接受一个参数数组.然后,我们将选项的哈希值提取到我们的"选项"变量中.最后,我们实现了验证.这允许验证随时随地与任何模型一起使用并保持干燥!
归档时间: |
|
查看次数: |
8683 次 |
最近记录: |