【问题标题】:ActiveRecord without setting up database tables? (declarative like Django)ActiveRecord 不设置数据库表? (像 Django 一样的声明式)
【发布时间】:2011-02-28 00:20:42
【问题描述】:

在 Django 中,您可以在 models.py 中完整描述您的模型。在带有 ActiveRecord 的 Rails 中,您在 /models 目录中描述模型的一部分,在迁移中描述部分模型。然后 ActiveRecord 从现有的数据库表中检查模型属性。

但我发现迁移、列和表令人头疼。

我怎样才能像 Django 一样——只声明所有模型属性而不是从数据库表中自省它们?

为了获得额外的奖励,请解释在哪里以及为什么这是一个坏主意。 :)

【问题讨论】:

    标签: ruby-on-rails database django activerecord django-models


    【解决方案1】:

    我认为DataMapper 是您所要求的。设置完成后,您可以使用 DataMapper.auto_migrate!或 DataMapper.auto_upgrade!。前者将在创建表之前删除表(如果它们存在),从而破坏任何数据。这对生产不利。后者是您避免丢失数据的方法,并且应该适合生产。

    在不确切知道它在做什么的情况下,我猜它是在启动期间检查表以确定是否进行数据库更改。这可能会拖慢启动时间,尤其是在有很多模型/表格的情况下。这实际上是考虑 NoSQL 的一个很好的理由——特别是上面提到的 Mongo。它很快。真的很快,因此启动成本要少得多。 MongoMapper 是要走的路。 tekpub blog post 是必读的。

    我第一次听说 DataMapper 是在阅读有关 Merb 的文章时,所以它在 rails 3 中是有道理的。我不知道您是否可以让它在 rails 2.x 中工作。

    【讨论】:

      【解决方案2】:

      如果您讨厌迁移,请尝试使用 NoSQL。没有迁移!

      因此,您只需在需要时将属性添加到文档中。在您的代码中,处理它们可能不存在的事实,然后砰!

      我从博客about tekpub 中获取了以下模型定义(注意你不继承表单activerecord)也推荐Herding Code podcast

      class Production
      
        include MongoMapper::Document
      
        key :title, String, :required => true
        key :slug, String, :unique => true, :required => true, :index => true
        key :description, String
        key :notes, String
        key :price, BigDecimal, :numeric => true
        key :released_at, Date, :default => Date.today
        key :default_height, String, :default => '600'
        key :default_width, String, :default => '1000'
        key :quotes, String
      
        #royalty info
        key :producers, String
      
        timestamps!
      end
      

      【讨论】:

        【解决方案3】:

        试试auto_migrations plugin。我认为这对开发来说不是一个坏主意,但是当数据库中有关键数据时,我会在投入生产后切换到迁移。

        您可能也有兴趣将 ActiveRecord 替换为 DataMapper,它适用于 Rails 3。它具有您所说的风格,在模型代码中而不是单独的数据库中描述模型的数据字段架构文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-05
          • 2014-02-16
          • 2012-12-29
          • 2021-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多