Добавление столбца к модели во время выполнения (без дополнительных таблиц) в рельсах - PullRequest
4 голосов
/ 01 мая 2010

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

Мне удалось сделать это путем миграции:

  def test_migration_create  
   Artwork.add_column :test_column, :integer
    flash[:notice] = "Added Column test_column to artworks"
    redirect_to :action => 'index'
  end

  def test_migration_delete
    Artwork.remove_column :test_column
    flash[:notice] = "Removed column test_column from artworks"
    redirect_to :action => 'index'
  end

Работает, столбец добавляется / удаляется в / из базы данных без проблем. Сейчас я использую active_scaffold, поэтому я получаю поле test_column в форме, ничего не добавляя. Однако, когда я отправляю создание или обновление, test_column не обновляется и остается пустым. Проверяя параметры, я вижу:

Parameters: {"commit"=>"Update", "authenticity_token"=>"37Bo5pT2jeoXtyY1HgkEdIhglhz8iQL0i3XAx7vu9H4=", "id"=>"62", "record"=>{"number"=>"test_artwork", "author"=>"", "title"=>"Opera di Test", "test_column"=>"TEEST", "year"=>"", "description"=>""}}

параметр test_column передан правильно. Так почему активная запись продолжает игнорировать это? Я попытался перезапустить сервер тоже безуспешно.

Я использую ruby ​​1.8.7, rails 2.3.5 и mongrel с базой данных sqlite3.

Спасибо

1 Ответ

1 голос
/ 02 мая 2010

В среде разработки модели ActiveRecord перезагружают свои метаданные при каждом запросе. Однако в производственной среде метаданные кэшируются при запуске, поэтому любые добавленные вами столбцы не будут легко доступны, пока эти метаданные не будут обновлены.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...