2012-08-09 69 views
18

我一直在閱讀很多關於這個話題的文章,而且似乎沒有什麼能滿足我的需求。我很抱歉,如果我重複或不清楚我對ruby和rails都陌生,並且對於stackoverflow是新的。創建一個包含導軌模型的寶石

我有一個現有的軌道應用程序,其中有很多基礎設施。我想採用它的幾個模型,將它們嵌套在命名空間中,並將所有這些模型放入ruby gem中,以用於其他rails應用程序。根據我的理解,軌道的加載路徑存在問題,因爲它們是慣例和定義另一個引擎的問題,因爲您有兩個並且它們會崩潰。

我一直在尋找一個指導或教程來學習如何做到這一點,但沒有太多的運氣,但我積極的那裏有東西在那裏,如果有人能指點我,那將是美好的。

我試圖用發動機製造寶石時碰撞或缺乏導軌失敗。

我正在運行rails 3.2.3和ruby 1.9.3。

+1

您所描述的問題通常通過將您的代碼重構爲新的Rails引擎來解決。你如何創建引擎,以及你正在得到什麼錯誤? – PinnyM 2012-08-09 20:40:51

+1

就指南而言,你看過[this](http://edgeguides.rubyonrails.org/engines.html)還是[this](http://stackoverflow.com/questions/4993166/making-a-定製插件寶石發動機換軌-3-APP)? – PinnyM 2012-08-09 20:42:51

+0

我會嘗試並更好地描述我想要做的事情: 我已經爲帖子,評論和標籤製作了基本Rails教程(博客)的示例應用程序。 現在我想說明一下,我想把標籤放到一個gem中,這樣任何Rails應用程序都可以在任何模型上添加標籤。 我試着做的是製作一個包含所有標籤(模型,partials,遷移)的gem並且我安裝了所說的gem,然後當我需要它的時候我會拋出,例如,如果我運行irb(在另一個評論中張貼輸出, 001>需要 「tag_model_gem」 NameError::關字符 – Shrewd 2012-08-14 10:11:16

回答

1

開始本手冊 - http://guides.rubyonrails.org/engines.html

與COMAND

$ rails plugin new "EngineName" --mountable 

不是把所有你需要的模型,控制器e.t.c爲您引擎上建立的發動機。從中產生寶石。 添加這個寶石給你MasterApp。所有模型將在EngineName命名空間下提供。

+1

問題不僅僅是如何讓安裝的插件,但涉及到的東西被添加到該插件,並提出在後臺默默運行。 – Shrewd 2015-02-16 13:29:31

17

是的,您可以創建一個包含模型的gem,並將它們包含在多個Rails應用程序中。這是做這件事:

  • 創建一個寶石:​​

  • 創建或移動您的模型到demo_gem。我更喜歡將它們放在lib/寶石文件夾中,例如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 generators在gem本身中創建遷移並將其複製到應用程序。