论坛首页 编程语言技术论坛

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

浏览 3162 次
精华帖 (0) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-15  
在项目中有这么个需求,我们有很多表结构都是一样的,例如: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)
   发表时间:2008-01-16  
想法很好啊,但是没有考虑后期的代码维护啊,如果模型要加逻辑怎么办呢?而且每个模型业务不一样呢?为什么不可以用一个表结构呢?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics