开发者

Rails Model callback: Passing field as parameter to callback classes?

I want to implement before_validaton callback in a separate class so that it can be reused by multiple model classes.

Here in callback i want to strip field passed as parameter but i am not sure how to pass parameter to callback class. Also i want to pass this as reference rather than by value(not sure if this concept is in Ruby Rails). I am following the link http://guides.rubyonrails.org/active_record_validations_callbacks.html#callback-classes

Here is code which is not completely correct, please help for same

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

If i define 开发者_StackOverflow中文版method in model in itself rather than defining in separate callback class code is like this (which works fine)

    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

Of course it is not good to replicate methods in all of models so i want to define method in callback classes.


You may do this or use 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜