Как я могу переместить ассоциации и поля has_many из одной коллекции в другую? - PullRequest
2 голосов
/ 27 ноября 2011

Я довольно новичок в RoR. Извините, если я использую неправильную терминологию или ответ очевиден.

Изначально у меня была одна модель для пользователей:

class User
  include Mongoid::Document

  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :trackable,
         :validatable,
         :token_authenticatable,
         :omniauthable

  has_many :foos
  field :name, :type => String
  # Some other company fields
  ....
end

class Foo
  include Mongoid::Document

  belongs_to :user
  ...
end

Эта первоначальная модель пользователя использовалась для представления компании.

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

class User
  include Mongoid::Document

  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :trackable,
         :validatable,
         :token_authenticatable,
         :omniauthable

  belongs_to :rolable, :polymorphic => true
end

class Company
  include Mongoid::Document

  has_one :user, :as => :rolable

  has_many :foos
  field :name, :type => String
  # Some other company fields
  ....
end

class Manager
  include Mongoid::Document

  has_one :user, :as => rolable
end

class Foo
  include Mongoid::Document

  belongs_to :company
  ...
end

Кажется, что пока все работает нормально для регистрации новых пользователей. Тем не менее, есть старая база данных, которую я должен преобразовать. Что меня смущает, так это ассоциация has_many, которая у меня была раньше. Я уже реализовал миграцию (используя этот драгоценный камень https://github.com/adacosta/mongoid_rails_migrations) для перемещения полей из пользовательской модели в модель компании, но, опять же, я не мог понять, как обращаться с ассоциациями.

1 Ответ

1 голос
/ 06 апреля 2012

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

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

...