Некоторые модели могут быть в одной базе данных (те, которыми вы хотите поделиться), а другие - в собственной базе данных нового приложения (чтобы они не вступали в конфликт с существующим приложением).
Чтобы указать другую базу данных для конкретной модели, попробуйте что-то вроде этого:
class SharedModelBase < ActiveRecord::Base
self.abstract_class = true
establish_connection(ActiveRecord::Base.configurations["shared_db_connection_#{RAILS_ENV}"])
end
Теперь используйте это как базовый класс для ваших общих моделей, и вам будет хорошо.
Часть вашего вопроса - это лучшие практики, поэтому пара других вариантов.
Один из вариантов - даже не пытаться получить доступ к БД напрямую, а вместо этого создать интеграцию между приложениями, используя ActiveResource. Пусть исходное приложение предоставит интерфейс RESTful к этим таблицам, и использует его в новом приложении, и вообще не разделяет базу данных. Мне нравится эта опция, но она может быть неуместной для вашей ситуации.
Другим вариантом является рефакторинг этих общих таблиц в их собственную базу данных, и оба приложения rails получают доступ к этой базе данных. Вы даже можете в конечном итоге написать сервисы (например, restful interface) для этих общих данных, которые будут использоваться обоими приложениями, и тогда вы будете прекрасно разделены.
Рассмотрим сложности, когда меняется эта общая структура БД. Если вы делитесь таблицами напрямую, оба приложения rails могут быть изменены одновременно, чтобы приспособиться к изменениям - вы связали график выпуска сейчас, эти приложения теперь связаны. Если вы оберните доступ к базе данных в службах, это может обеспечить абстракцию, поскольку вы можете одновременно обслуживать как старую, так и новую структуру, развертывая новую обновленную службу одновременно со старым интерфейсом службы. Все зависит от вашего приложения, если такая сложность того стоит.