我想在一个单独的类中实现before_validaton回调,以便多个模型类可以重用它。
这里在回调中我想剥离作为参数传递的字段,但我不知道如何将参数传递给回调类。此外,我想传递此作为参考而不是值(不确定这个概念是否在Ruby Rails中)。我正在关注链接http://guides.rubyonrails.org/active_record_validations_callbacks.html#callback-classes
这里的代码不完全正确,请帮助相同
class StripFieldsCallback
def self.before_validation(field)
field = field.strip
end
end
class User < ActiveRecord::Base
validates_uniqueness_of :name, :case_sensitive => false
validates_length_of :name, :maximum => 50
before__validation StripFieldsCallback(name)
end
如果我在模型中定义方法本身而不是在单独的回调中定义类代码就像这样(工作正常)
class User < ActiveRecord::Base
validates_uniqueness_of :name, :case_sensitive => false
validates_length_of :name, :maximum => 50
before__validation :strip_blanks
protected
def strip_blanks
self.name = self.name.strip
end
end
当然,在所有模型中复制方法并不好,所以我想在回调类中定义方法。
答案 0 :(得分:4)
您可以这样做或使用normalize_attributes gem
module StripFieldsCallback
def before_validation_z(field)
write_attribute(field, read_attribute(field).strip) if read_attribute(field)
end
end
class User < ActiveRecord::Base
include StripFieldsCallback
before_validation lambda{|data| data.before_validation_z(:name)}
end