我想在运行时创建一个ActiveRecord模型。在运行时创建ActiveRecord模型rails3
在我的系统中,我生成了一些报告,并且它们都与数据库表/视图绑定。所以唯一的区别就是表名。
所以我想要做的是有一个活跃的记录公共类(最好在运行时生成)并在运行时分配表名。我应该能够指定一个范围来选择一个日期范围。我正在考虑在运行时获取列名以显示数据。
- 谁能帮助我如何 在运行时
- 分配范围的方法
创建ActiveRecord的模型,我在Rails3中提前
欢呼
感谢
sameera
我想在运行时创建一个ActiveRecord模型。在运行时创建ActiveRecord模型rails3
在我的系统中,我生成了一些报告,并且它们都与数据库表/视图绑定。所以唯一的区别就是表名。
所以我想要做的是有一个活跃的记录公共类(最好在运行时生成)并在运行时分配表名。我应该能够指定一个范围来选择一个日期范围。我正在考虑在运行时获取列名以显示数据。
创建ActiveRecord的模型,我在Rails3中提前
欢呼
感谢
sameera
借款create_class
从你链接的文章,怎么是这样的:
TABLE_NAMES = %w[customers products purchases]
def create_class(class_name, superclass, &block)
klass = Class.new superclass, &block
Object.const_set class_name, klass
end
def create_model_class(table_name)
create_class(table_name.classify, ActiveRecord::Base) do
scope :in_date_range, lambda {|start_date, end_date| where("start_date >= ?", start_date).where("end_date <= ?", end_date) }
end
end
TABLE_NAMES.each {|table_name| create_model_class(table_name) }
如果你想使用的所有数据库中的表,你可以这样做:
TABLE_NAMES = ActiveRecord::Base.connection.tables
但除非你对所有的表格进行相同的处理,我猜你不会那么做。
一旦你创建你的模型类,你现在应该能够打印每个表的对象各自的列:
def print_attributes(model_obj)
puts model_obj.attributes.map {|k,v| "#{k}=#{v.inspect}" }.join(', ')
end
Customer.in_date_range(Date.today, Date.today + 1.day).each {|c| print_attributes(c) }
Product.in_date_range(Date.yesterday, Date.today + 2.days).each {|c| print_attributes(c)
Purchase.in_date_range(Date.yesterday, Date.today + 3.days).each {|c| print_attributes(c) }
谢谢乔纳森Tran – sameera207 2011-12-01 19:36:50
做这个假设视图名称是静态的,最简单的方法是创建一个模块的通用功能,然后包含到你的基地模式..
模块ModuleA ... 结束
类A延伸的ActiveRecord ::基地 包括ModuleA 端
B类延伸的ActiveRecord ::基地 包括ModuleA 端
那么,你有没有编写任何代码,并要我们写为你? – 2011-05-12 06:45:58
您好@TinMan,我遇到以下资源http://snippets.dzone.com/posts/show/2390,http://www.workingwithrails.com/forums/4-ask-a-rails-expert/ topic/757-creating-dynamic-models,好像我应该在ruby中使用'create_class'方法。但我不知道从哪里开始。这就是为什么我把它发布在论坛上。所以,任何资源,文章是欢迎感谢 – sameera207 2011-05-12 06:53:12