如何创建一个清理给定模型列的模块?

时间:2014-01-20 14:09:12

标签: ruby-on-rails ruby

我使用此sanitize gem来清理我的模型。

但是我想创建一个模块来清理任何给定的列:

sanitize :name, on: :product

我正在寻找一些元编程,但我仍然没有得到任何东西:

class_eval <<-RUBY, __FILE__, __LINE__+1
   def #{column}=(value)
       #{column} = Sanitize.clean(value)
    end
  RUBY

1 个答案:

答案 0 :(得分:1)

module ColumnSanitizer
  extend ActiveSupport::Concern

  module ClassMethods
    def sanitize(*args)
      args.each do |attribute|
        class_eval <<-RUBY
          def #{attribute}=(value)
            super Sanitize.clean(value)
          end  
        RUBY
      end
    end
  end
end

class YourModel < ActiveRecord::Base
  include ColumnSanitizer
  sanitize :name
end