在Django中,您可以在models.py中完整地描述您的模型。在带有ActiveRecord的Rails中,您可以在/ models目录中描述模型的一部分,并在迁移中描述其中的一部分。然后,ActiveRecord会对现有数据库表中的模型属性进行内省。
但我发现迁移,列和表格令人头疼。
我怎么能像Django一样 - 只是声明所有模型属性而不是从数据库表中反省它们?
要获得额外的功劳,请说明这是一个坏主意的地点和原因。 :)
答案 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中使用它。