项目中遇到的问题(二)(动态创建MODEL)

在项目中有这么个需求,我们有很多表结构都是一样的,例如:a_table,b_table,c_table
但是如果我每个一样的表都去建立一个相应的MODEL,比较浪费,后来找到一个不错的方法,动态的创建MODEL,拿来与大家分享,希望可以帮助到大家。
module Dynamic
    class << self
      def klass(table_name)
        tname = class_name_from_table(table_name)
        const_missing(tname)
      rescue NameError
        define_klass(table_name)
      end
      
      def objeck(table_name)
        klass(table_name).new
      end

      private
        def class_name_from_table(table_name)
          Inflector.camelize(table_name)
        end

        def define_klass(table_name)
          tname = class_name_from_table(table_name)
          class_def = <<-end_eval
            class #{tname} < ActiveRecord::Base
              set_table_name('#{table_name}')
            end
          end_eval#此处加入到代码后出错,去掉空格后就好了
          eval(class_def, TOPLEVEL_BINDING)
          const_get(tname)
        end
    end
  end

上面这段代码放到libs包下,新建一个ruby module,然后加入以上代码。
使用的时候,如下:
table_name = "a"
#直接就可以用了,很方便吧
Dynamic.klass(table_name).find(:all)
#新建了个对象
Dynamic.objeck(table_name)

你可能感兴趣的:(C++,c,Ruby,Rails,ActiveRecord)