ActiveRecord без настройки таблиц базы данных? (декларативный, как Джанго) - PullRequest
3 голосов
/ 05 июня 2010

В Django вы полностью описываете свои модели в models.py. В Rails с ActiveRecord вы описываете часть модели в каталоге / models, а часть - в миграциях. Затем ActiveRecord анализирует свойства модели из существующих таблиц базы данных.

Но я считаю, что миграции, столбцы и таблицы являются головной болью.

Как я могу сделать как Django - просто объявить все свойства модели, а не анализировать их из таблиц базы данных?

А для дополнительного кредита объясните, где и почему это было бы плохой идеей. :)

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Если вы ненавидите миграцию, попробуйте использовать NoSQL. Никаких миграций!

Таким образом, вы просто добавляете свойства в свой документ, когда они вам нужны. В вашем коде учтите тот факт, что они могут не существовать и обмануть!

Я взял следующее определение модели (обратите внимание, вы не наследуете форму activerecord) из блога о tekpub Также рекомендую подкаст Herding Code

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 голос
/ 16 июня 2010

Я думаю DataMapper - это то, что вы просите. После настройки вы либо используете DataMapper.auto_migrate! или DataMapper.auto_upgrade !. Первые будут отбрасывать таблицы, если они существуют, до их создания, тем самым уничтожая любые данные. Это было бы плохо для производства. Последнее - это то, как вы избегаете потери данных, и это должно быть хорошо для производства.

Не зная точно, что он делает, я предполагаю, что он проверяет таблицы во время запуска, чтобы определить, вносить ли изменения в базу данных. Это может затянуть время запуска, особенно с большим количеством моделей / таблиц. Что на самом деле является одной из веских причин для рассмотрения NoSQL - в частности, Mongo, как упоминалось выше. Это быстро. Действительно быстро, и, следовательно, стоимость запуска намного, намного меньше. MongoMapper это путь. сообщение в блоге tekpub необходимо прочитать.

Впервые я услышал о DataMapper в чтении о Merb, поэтому имеет смысл, что он в rails 3. Я не знаю, сможете ли вы заставить его работать в rails 2.x.

1 голос
/ 05 июня 2010

Попробуйте плагин auto_migrations . Я не думаю, что это плохая идея для разработки, но я бы переключился на миграцию после запуска в производство, когда в базе данных есть критические данные.

Вас также может заинтересовать замена ActiveRecord на DataMapper , который работает в Rails 3. Он имеет стиль, о котором вы говорите, с описанием полей данных модели вместо кода модели. отдельного файла схемы базы данных.

...