如何在rails上的ruby中动态地将列添加到现有数据库

时间:2014-09-11 17:14:46

标签: mysql ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我在我的后端使用ruby和mysql2作为数据库使用ruby,你可以从我的昵称猜测我是rails中的新手。

{
  "last_viewed_categorie" : "shirt",
  "last_name" : "herose",
  "login_screen_apperaed" : 1,
  "item_added_to_cart"  : 5,
  "first_name" : "george"
}

这是我目前收到的数据库中的json格式。我想要的是这样的东西

jsonColumns //array that contains keys of json

jsonColumns.each do |jsonColumn|
unless @existingColumnNames.include?(jsonColumn)

"Alter table mutable add_column #{jsonColumn}"

我似乎无法找到任何方法来制作这样的东西,

甚至可能吗?

如果不可能,你能提供类似的吗?

谢谢

3 个答案:

答案 0 :(得分:3)

动态更改表格不是您想要做的事情。更好的计划是使用序列化列,您可以在其中创建可以存储任意数据的LONGBLOB列,并在模型中使用serialize声明该列。

除了计划的迁移之外,Rails中的ActiveRecord层实际上要求您的架构是静态的,不变的。在运行时引入任意列会使列缓存不一致,并可能导致问题。

如果您正在处理大量JSON数据,则可能需要考虑使用PostgreSQL,其中包含Rails支持的native JSON column type。这使得存储,查询和操作这些结果变得更加容易。

答案 1 :(得分:0)

在循环中运行此代码。

 add_column :mutable, :jsonColumn, :text

答案 2 :(得分:0)

这是一个宝石。看看这个

https://github.com/Liooo/dynabute

此外,这个问题是重复的

Rails: dynamic columns/attributes on models?