项目中遇到的问题(二)(动态创建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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值