【问题标题】:how to generate active record models from database如何从数据库生成活动记录模型
【发布时间】:2011-02-28 05:22:59
【问题描述】:

我正在寻找一种工具或方法,可以将我庞大的旧数据库转换为活动记录模型定义......比如逆向工程......

【问题讨论】:

  • 这不是“逆向工程”。逆向工程意味着某种加密/混淆,而您拥有数据库架构的完整纯文本“源”。
  • ~这不是逆向工程的意思。
  • 这个rare_map gem 符合您的预期:github.com/wnameless/rare_map

标签: ruby database activerecord


【解决方案1】:

这与其说是逆向工程问题,不如说是“您的旧数据库是否遵守活动记录约定”问题。大多数都没有,根据我的经验,在数据端进行一些迁移工作以使其处于符合这些约定的状态几乎更容易。 Rails 是一款非常有主见的软件,与它争论的越少,你就会越快乐。

我的两分钱...

【讨论】:

  • @meagar 是正确的,如果代表您的模型的表格确实遵守,只需扩展 ActiveRecord::Base
【解决方案2】:

对不起,我也不知道工具。但是创建一个活动记录模型真的很简单,正如微薄所示。此外,您可能需要描述表名和主键:

class Artikelgruppe < ActiveRecord::Base
  set_table_name "tblArtGrp"
  set_primary_key "ArtGrpID"
end

由于我的 Rails 应用程序只使用我们遗留数据库的一小部分,我更喜欢在数据库中创建特定于我的应用程序需求的视图。我在描述 Rails 中的 7 个模型的连接时确实有问题,但是创建一个视图来连接数据库中的 7 个表真的很容易。

为什么 Rails 人仍然认为他们是宇宙的中心?我有十几个用不同语言编写的应用程序,共同点是数据库。想象一下,我必须更改数据库才能让 Rails 满意......

【讨论】:

    【解决方案3】:

    RMRE 似乎是这里列出的两个中最好的。您可以在创建一个特殊的稀有地图.yml 后在您的 Rails 根目录中运行它,这只是您希望它扫描的数据库的数据库配置。如果您在 rails 下,则在 ./config 中,如果不在,则在应用程序的根目录中。

    一件好事:对于非 Rails 应用程序,它会生成一个 [module]_base.rb,它会创建一个单独的 ActiveRecord::Base,它会将类填充到您选择的模块中并创建一个单独的 ActiveRecord::Base每个人。

    RMRE 生成的模型会自动为您填写所有关系(belong_to、has_many 等)。它将用于非 Rails 应用程序,或者如果您在配置中指定它,则将模型填充到您的模块中。

    上面提到的rare_map gem 只是为我创建了空模型,这并不能给你买很多东西。

    【讨论】:

      【解决方案4】:

      ActiveRecord 会为您做到这一点。您实际上不必在模型中指定列。假设一个完整的users表,只需将以下内容放入app/models/user.rb

      class User < ActiveRecord::Base
      
      end
      

      之后可以添加您想要执行的任何其他验证。

      也就是说,您可能不想这样做。由于 Rail 的“约定优于配置”的座右铭,Rails 对于那些试图移植旧项目的人来说是出了名的困难。如果您试图让 Rails 适应现有的数据库架构,这将是一场艰苦的战斗。

      【讨论】:

        【解决方案5】:

        看看RMRE gem。这是 RMRE 作者写的introducing blog post

        【讨论】:

        • 不鼓励仅链接答案
        猜你喜欢
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-12
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多