Создание драгоценного камня, который содержит модели рельсов
Я много читал по этой теме, и ничто, похоже, не полностью удовлетворяет мои потребности. Прошу прощения, если я повторяю или неясно о чем-то, что я новичок в рубине и рельсах, а также о новом для stackoverflow.
У меня есть существующее приложение rails с большим количеством инфраструктуры. Я хочу взять несколько таких моделей, вложить их в пространство имен и поместить все это в рубиновый камень для использования в других приложениях rails. По моему мнению, существует проблема с путями загрузки для рельсов, поскольку они являются соглашением и проблемой с определением другого движка, так как тогда у вас есть два и они сбой.
Я искал руководство или учебник, чтобы узнать, как это сделать без большой удачи, но я уверен, что там что-то есть, если кто-то может указать мне на это, что было бы замечательно.
Мои попытки создать драгоценный камень с двигателем не удались при столкновении или отсутствии рельсов.
Я запускаю рельсы 3.2.3 и ruby 1.9.3.
Ответы
Ответ 1
Да, вы можете создать gem, содержащий модели, и включить их в несколько Rails-приложений. Это один из способов сделать это:
-
Создайте драгоценный камень: bundle gem demo_gem
-
Создайте или переместите свои модели в demo_gem. Я предпочитаю помещать их в папку lib/gem, например, demo_gem/lib/app/models/student.rb.
module DemoGem
class Student < ActiveRecord::Base
end
end
-
Требовать все ваши модели в demo_gem/lib/demo_gem.rb
require "demo_gem/version"
require "demo_gem/app/models/student.rb"
module DemoGem
# Your code goes here...
end
-
Включите жемчужину в свои Rails-приложения Gemfile (я предполагаю, что ваш код не является открытым исходным кодом, и вы не планируете публиковать его):
gem 'demo_gem', path: '../demo_gem'
Теперь вы можете использовать эти модели в любом месте в приложении с несколькими рельсами, просто используя DemoGem::Student
.
Здесь предполагается, что вы используете единую базу данных и что существуют таблицы. Однако вы можете создавать миграции в самом камне и копировать их в приложение с помощью Rails-генераторов.
Ответ 2
Начните с этого руководства - http://guides.rubyonrails.org/engines.html
Создайте движок с comand
$ rails plugin new "EngineName" --mountable
Вставьте все, что вам нужно, модели, контроллеры e.t.c в ваш движок. Сгенерируйте драгоценный камень из него.
Добавьте этот камень к вам MasterApp. Все модели будут доступны в пространстве имен EngineName.