странность миграции рельсов - PullRequest
0 голосов
/ 17 декабря 2010

вот моя миграция:

  class Avatar < ActiveRecord::Base
  end

  def self.up
    add_column :users,    :featured,            :boolean, :default => false, :null => false

    User.reset_column_information

    Avatar.all.each do |a|
      user = User.find(a.user_id)
      user.featured = a.featured
      user.save
    end

    drop_table :avatars
  end

по какой-то причине при запуске атрибут признака не сохраняется. если я запускаю это из консоли, это не проблема.

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

когда приведенный выше код выполняется в первый раз как есть, это вывод журнала ...

Migrating to MoveAvatarsToProfile (20101216003815)
** ActionMailerWithRequest: initialized properly
  [1m[36mSQL (0.5ms)[0m  [1m SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
  [1m[35mSQL (0.4ms)[0m   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
  [1m[36mSQL (0.3ms)[0m  [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m

есть идеи?

1 Ответ

0 голосов
/ 17 декабря 2010

Это своего рода конец, но запускать что-то вроде этого должно быть намного быстрее:

User.execute("UPDATE users 
              SET users.featured = avatars.featured 
              WHERE users.id = avatars.user_id")

Это не объясняет странное поведение, которое вы видите, но если у вас естьДля многих пользователей решение должно оказаться значительно более быстрым (и менее ресурсоемким).

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