Есть несколько опций, которые вы можете реализовать, чтобы заставить это работать:
Активный ресурс
Как уже отвечали другие, вы можете использовать ActiveResource . После прочтения ваших комментариев это похоже на решение, которое вы хотели бы избежать из-за аспекта множественных запросов
Контроллер получения
Во втором приложении rails может быть контроллер, который получает данные и создает из них записи.
class RecordReceiver < ActiveRecord::Base
def create
params[:data][:posts].each do |p|
Post.create(p)
end
end
end
Вы можете поместить пространство имен этого контроллера в пространство имен «API», которое является довольно чистым решением при правильной реализации.
Совместное использование базы данных
Вы можете использовать одну базу данных для двух приложений. Это означает, что вам не нужно отправлять данные из одной модели в другую, они уже будут там. Это наименьший объем работы для вас как разработчика, но он может оказаться невозможным в зависимости от имеющейся у вас архитектуры системы.
Две базы данных в каждом приложении
Вы можете реализовать несколько баз данных в каждом приложении, например так:
#Add to database.yml
other_development:
adapter: mysql
database: otherdb_development
username: root
password:
host: localhost
other_production:
adapter: mysql
database: otherdb_production
username: root
password:
host: localhost
Затем определите ваши модели следующим образом:
class Post < ActiveRecord::Base
end
class PostClone < ActiveRecord::Base
establish_connection "other_#{RAILS_ENV}"
end
Теперь ваша модель Clone
будет указывать на текущую базу данных, а модель PostClone
будет указывать на другую базу данных. Имея доступ к обоим, вы можете копировать данные в любое время с помощью основных методов модели.
Заключение
Поскольку вы не хотите использовать ActiveResource, я бы порекомендовал вам просто делиться базой данных между приложениями. Если это невозможно, попробуйте две модели, каждая из которых будет иметь свою базу данных. Наконец, получающий контроллер является допустимым, хотя и более медленным вариантом (так как он должен выполнять HTTP-запрос поверх запросов к базе данных)