Rails 3 Полиморфная ассоциация между одной моделью MongoMapper и одной / многими моделями Active Record - PullRequest
1 голос
/ 03 февраля 2011

У меня есть модель записи (Active Record), в которой хранятся некоторые пользовательские журналы.

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

Что мне нужно:

Хранить журналы в отдельной базе данных.

Так что я должен:

  1. Уметь управлять двумя разными базами данных в моей заявке (одна - Postgres / ActiveRecord, а другая - MongoDB / MongoMapper)

  2. Создать полиморфную связь между моей моделью Record, теперь с MongoMapper, и остальными моими моделями Active Record.

Таким образом, я могу сохранить свои журналы в базе данных MongoDB.

Спасибо.

1 Ответ

1 голос
/ 03 марта 2011

Да, это можно сделать.

Чтобы создать полиморфную ассоциацию, вам нужны и класс, и идентификатор.Идиоматически поля будут называться <assoc>_type и <assoc>_id.Вам нужно будет выполнить некоторые подключения, чтобы все работало.

  1. Создайте MongoMapper :: Document Class с ключами <assoc>_type и <assoc>_id с правильными типами (я думаю, MongoMapper позволяет Class как тип ключа) вместе с любыми другими ключами, которые могут вам понадобиться.
  2. Определите метод <assoc> и <assoc>=

    def assoc
      assoc_type.find(assoc_id)
    end
    
    def assoc=(input)
       assoc_type = input.class #STI makes this more complicated we must store the base class
       asspc_id = input.id
    end
    
  3. Возможнодобавьте метод к своим моделям ActiveRecord, позволяя им получить доступ к вашему классу журналирования MongoMapper.Если их много, вы можете захотеть собрать модуль и включить его во все классы, которым требуется такая функциональность.

‡ заменить на что-то значимое для вашего приложения, например, «ссылка».или субъект

...