在项目中有这么个需求,我们有很多表结构都是一样的,例如:a_table,b_table,c_table
但是如果我每个一样的表都去建立一个相应的MODEL,比较浪费,后来找到一个不错的方法,动态的创建MODEL,拿来与大家分享,希望可以帮助到大家。
上面这段代码放到libs包下,新建一个ruby module,然后加入以上代码。
使用的时候,如下:
但是如果我每个一样的表都去建立一个相应的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)