【问题标题】:ORM for Ruby that able to generate Model/Migration scripts from existing databaseORM for Ruby 能够从现有数据库生成模型/迁移脚本
【发布时间】:2013-03-16 17:35:23
【问题描述】:

是否有用于 Ruby 的 ORM 能够从现有数据库生成模型/迁移脚本?

我会将它与 sinatra 一起使用。

【问题讨论】:

  • 只是为了检查一下,您的意思是为 models 生成代码,而不是为 migrations 生成脚本?
  • 嗯.. 迁移脚本也可以:3
  • 什么是“模型脚本”?
  • 好吧,我答错了,因为我读的是“迁移”而不是“模型”,所以我现在就取消删除它! :)
  • @Mladen 一个代表每个表的 ruby​​ 类(来自 ORM)

标签: ruby orm sinatra


【解决方案1】:

您可以使用Sequel's migrations 转储现有架构(请参阅链接页面下方的“将当前架构转储为迁移”)。

另外,我知道如果您使用的是 Postgresql 或 MS SQL Server,您可以将数据库转储到脚本中,既可以作为模式也可以与数据一起使用。如果您要使用的 ORM 没有迁移工具(或者即使有),您可以使用这些脚本,甚至将它们嵌入到迁移中(Sequel will accept standard SQL strings too,其他 ORM 可能也可以)。


编辑:生成模型。

如果你想生成模型,那么 Sequel 有一个reflection API。这样的事情可以让你开始:

generator = ->(table) {
  s = <<STR
require 'sequel'
class #{table} < Sequel::Model
  # other stuff here
end
STR
}

DB.tables.reject{|name| name == :schema_info }
         .each do |table|
           File.new "app/models/#{table}.rb" do |f|
             f.write generator.call(table)
           end
         end

进行关联会更难,但我认为可能。看看Database#foreign_key_listModel association basics

【讨论】:

    【解决方案2】:

    这不是 ORM,但是有一个非常古老的 gem,叫做 magic_models 可以做到这一点,不确定它是否仍然有效:http://magicmodels.rubyforge.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2016-11-03
      • 2016-08-21
      相关资源
      最近更新 更多