Database 给定一个(经过清理的)属性头(元标记)数组,我如何根据这些标记自动为数据库中的每个属性头创建列?

Database 给定一个(经过清理的)属性头(元标记)数组,我如何根据这些标记自动为数据库中的每个属性头创建列?,database,ruby-on-rails-3,activerecord,automation,rails-migrations,Database,Ruby On Rails 3,Activerecord,Automation,Rails Migrations,这是一个未格式化的列表(这是一个损益表,有像这样的行标题,所以是的,自动化是一种方法) [“收入”、“其他收入总额”、“总收入”、“收入成本总额”…] 下面是我通过简单的小消毒程序CleanZeeString.new.go(str)运行每个数组实体(字符串)后的列表 [“收入”、“其他收入总额”、“总收入”、“总收入成本”…] 因此,我想访问Rails方法,这些方法将允许我至少部分地自动化数据库列的创建过程和迁移,因为此列表有50多个行标题,有更多的列表,我不再相信手工操作。稍后(个人进度):

这是一个未格式化的列表(这是一个损益表,有像这样的行标题,所以是的,自动化是一种方法)

[“收入”、“其他收入总额”、“总收入”、“收入成本总额”…]

下面是我通过简单的小消毒程序CleanZeeString.new.go(str)运行每个数组实体(字符串)后的列表

[“收入”、“其他收入总额”、“总收入”、“总收入成本”…]

因此,我想访问Rails方法,这些方法将允许我至少部分地自动化数据库列的创建过程和迁移,因为此列表有50多个行标题,有更多的列表,我不再相信手工操作。

稍后(个人进度):

  • 我开始相信,解决这个问题的方法是在迁移方面跳出rails的“盒子”。是的,为了解决这个问题,我认为我们可能需要创造性地思考迁移

  • 我知道这是多么容易做到,无论是手工操作,还是借助某种第三方脚本解决方案,但我拒绝了。如果我想的话,昨晚喝了几杯酒之后,我应该可以自动做到这一点。给定数组,并且每个列都是相同的类型(rails中的“decimal”),这应该可以以一种自动的、类似rails的方式实现

  • 迁移文件只是普通的ruby文件。根据这一事实制定解决方案。是时候开始幻想了。字符串#到#符号

明白了---

class CreateIncomeStatements

我使用了
eval()
方法,感觉到老师的鬼魂在拍我的手腕,但是,它起了作用。“啊哈”的关键是重新考虑迁移文件只是ruby文件这一事实,因此,我可以随心所欲。

强烈鼓励不依赖eval()的解决方案!如果只是出于学术原因(即出于好奇),再加上eval()感觉像作弊,太“松散”
class CreateIncomeStatements < ActiveRecord::Migration
  def change
    f = File.open(File.join(Rails.root, 'lib', 'assets', 'is_list.json')) 
    is_ary = JSON.parse(f.read)
    create_table :income_statements do |t|
      is_ary.each do |k|
      eval("t.decimal k.to_sym")
      end
      t.timestamps
    end
  end
end