2014-03-06 22 views
7

我正在學習Rails。我有一個控制器負責顯示解析用戶上傳文件的數據。我不希望數據存儲在模型中的任何地方。我可以包含一個可以在我的控制器方法中實例化的類嗎?這裏是什麼,我的意思是一個基本的代碼示例:如何在rails中編寫和包含常規ruby類

該控制器只包含一個方法:

class MyController < ApplicationController 
    def index 
     test = FileProcessorService.new 
     @test = test.test() 
    end 
end 

這裏是當進行實例調用其方法是將處理邏輯的類:

class FileProcessorService 
    def test 
     return 'This is a test' 
    end 
end 

我的問題:

哪裏是最好的地方來存儲這個類?我如何在我的控制器中引用這個類? 關於在rails中使用類的這個特定主題的任何建議?控制器中是否有常規ruby類的實例存在問題?我不希望我的用戶看到相同的數據。這就是爲什麼我不想在我的控制器中包含全局變量。自從我有一個MVC與Java MVC背道後,沒有模型。一旦我瞭解基本軌道控制器功能的工作原理,我就會轉向模型。

非常感謝您的幫助。

回答

7

我通常把這些在app/classes,或者,如果有很多人,爲更具體的文件夾喜歡app/servicesapp/notifiers

您可以啓用自動加載在config/application.rb

config.autoload_paths += %W(#{config.root}/app/classes #{config.root}/app/services) 

如果它們不是特定於應用程序的,將它們提取爲寶石。

+0

好的......但是我怎麼包括這個類?什麼是config.root?我沒有看到我的application.rb文件中的config.autoload_paths。我看到#config.i18n.load_path + = Dir [Rails.root.join('my','locales','*。{rb,yml}')。to_s] #config.i18n.default_locale =:de '和'需要File.expand_path('../ boot',__FILE __)'..我使用rails 4 btw。我該怎麼辦? –

+1

在你的'config/application.rb'文件中,將這個答案中的'config.autoload_paths'行添加到'class Application

+0

明白了!有用。謝謝。所以我有另一個問題。我在我的控制器中創建了這個類的一個實例。每個控制器都會請求創建一個常規ruby類的新實例嗎?只是想確保常規ruby類的實例屬性不會跨請求共享。謝謝。 –

相關問題