ActiveRecord没有设置数据库表? (像Django一样声明)

时间:2010-06-04 21:51:01

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

在Django中,您可以在models.py中完整地描述您的模型。在带有ActiveRecord的Rails中,您可以在/ models目录中描述模型的一部分,并在迁移中描述其中的一部分。然后,ActiveRecord会对现有数据库表中的模型属性进行内省。

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

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

要获得额外的功劳,请说明这是一个坏主意的地点和原因。 :)

3 个答案:

答案 0 :(得分:2)

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

因此,您只需在需要时为文档添加属性。在你的代码中,处理它们可能不存在的事实和bam!

我从博客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

答案 1 :(得分:1)

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

您可能也有兴趣将ActiveRecord替换为DataMapper,它在Rails 3中有效。它具有您所讨论的样式,在模型代码中描述模型的数据字段而不是单独的数据库模式文件。

答案 2 :(得分:1)

我认为DataMapper就是你所要求的。设置完成后,您将使用DataMapper.auto_migrate!或DataMapper.auto_upgrade!。前者会在创建表之前删除表,从而破坏任何数据。那对生产来说不好。后者是你如何避免丢失数据,应该适合生产。

在不确切知道它在做什么的情况下,我猜它是在启动期间检查表以确定是否进行数据库更改。这可以缩短启动时间,特别是对于很多模型/表格。这实际上是考虑NoSQL的一个很好的理由 - 特别是如上所述的Mongo。它很快。真的很快,因此启动成本要低得多。 MongoMapper是要走的路。必须阅读tekpub blog post

我第一次听说DataMapper正在阅读关于Merb的内容,所以它在rails 3中是有意义的。我不知道你是否能够在rails 2.x中使用它。