`
ziyoujiedao
  • 浏览: 40324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

项目中遇到的问题(二)(动态创建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)
分享到:
评论
2 楼 rain2005 2008-01-16  
想法很好啊,但是没有考虑后期的代码维护啊,如果模型要加逻辑怎么办呢?而且每个模型业务不一样呢?为什么不可以用一个表结构呢?
1 楼 ziyoujiedao 2008-01-15  
怎么都没人来评价下啊,哎~~这个东西不好吗?我觉得很不错的啊

相关推荐

Global site tag (gtag.js) - Google Analytics