Rails 请问 Rails 中可以动态创建数据库表或动态在表中添加字段吗?而不是通过 db:migrate

scige · 2013年01月10日 · 最后由 golden05 回复于 2016年02月23日 · 6019 次阅读

现在在做一个数据管理系统,希望能够实现这样的功能:

  1. 用户可以创建一个新的表,并指定表中有哪些字段,然后就可以向表中添加数据。
  2. 也希望以后也可以修改或添加新的字段。

实现上想到可能有两种做法:

  1. 每个用户的表对应一个真实的数据库表,该如何实现?
  2. 所有用户的表对应同一个数据库表,该如何实现? 或者还有其他更好的方法?

大家有什么好办法吗?谢谢!

如果只是自己用用,数据量不大的话,每个人一个 sqlite 好了,简单

@vkill 可否说的具体一点,每人一个 sqlite 如何实现上面的需求?

#2 楼 @scige 每个人一个 sqlite,可以使用下面的方法动态生成一个 model 来做数据操作了。建库、建表参考 https://github.com/luislavena/sqlite3-ruby 吧,上面有例子。当然也可以用 migration 来做这个事情。

require 'sqlite3'
require 'active_record'

my_ar = Class.new(ActiveRecord::Base) do
  self.abstract_class = true
  establish_connection(
    :adapter => "sqlite3",
    :database  => "/tmp/tmp.sqlite3"
)
end
my_user = Class.new(my_ar) do
  self.table_name = 'users'
end
my_user.new

最近我也在研究这个问题,忍不住回复下

你的需求其实是建立一个一对多的关联。你使用 has_many :thourgh 就可以搞定了。 一个模型可以对应其他的多个字段模型,设计界面的时候,使用 fields_for 来展现就可以了。 可以搜索下 nested 关键词

@scige 不知道这个问题后来你有啥比较好的解决方案,想请教一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号