2016-06-08 27 views
0

我試圖創建一個服務對象,以從product.rb AR模型中提取幾個方法,但由於某種原因,我無法自動載入新的TwitterShare類。當我打開控制檯並嘗試類似Product.last.twitter_share_text時,我得到了NameError: uninitialized constant Product::TwitterShare錯誤。rails爲服務對象組織文件夾

這是怎麼回事?我應該如何組織我的文件夾/文件?我必須告訴導軌自動載入服務嗎?下面是當前的代碼:

應用程序/模型/ product.rb

class Product < ActiveRecord::Base 

    def twitter_share_text 
    TwitterShare.new(name: self.name, oneliner: self.oneliner).return_text 
    end 

應用程序/服務/ twitter_share.rb

class TwitterShare 
    attr_reader ......... 

    def initialize.... 
end 

回答

1

你需要讓rails知道它可能找到TwitterShare

以下添加到您的application.rb

config.autoload_paths << "#{Rails.root}/app/services" 

,然後重新啓動consoleserver

rails現在應該能夠正確定位twitter_share.rb並加載TwitterShare

有關更多信息,請參閱Autoloading and Reloading Constants

+0

謝謝達拉姆。我不確定這是否正確。我檢查了一個github repo,其中這個人正在使用相同的文件夾結構,但他沒有在'application.rb'中包含這一行。感謝這一點,我認爲必須有更好的方式來做到這一點。 –