在Controller中包含Service类

时间:2015-12-23 15:20:10

标签: ruby ruby-on-rails-4

我想将我的services文件夹中的以下类包含到Controller中。

这是..services / product_service.rb中的类

class MyServices
 class << self
  def screen_print
   "These are the words in screen print"
  end
 end
end

我想要做的就是在我的控制器中:

class AmazonsController < ApplicationController
 def index
  @joe = MyServices.screen_print
 end
end

我以为我可以将它包含在控制器中。而且它不是一个模块,所以包括isn不工作,我尝试更新我的config / appliaction.rb文件,但是没有工作..

3 个答案:

答案 0 :(得分:2)

我相信您的班级名称必须与档案名称相同。因此,由于您的文件名为List<Button> buttons = new List<Button> { button3, button4, button5......etc }; foreach (Button btn in buttons) { btn.ForeColor = Color.White; } ,因此您的类应为:

product_service.rb

并在您的控制器中:

class ProductService
  class << self
    def screen_print
      "These are the words in screen print"
    end
  end
end

答案 1 :(得分:1)

除了已指出的naming problems之外,Rails不会自动要求来自其不知道的文件夹中的任意文件。

如果您想要自动需要新文件夹中的文件,则需要将其添加到Rails的自动加载路径中:

# config/application.rb
config.autoload_paths << Rails.root.join('services')

有关详细信息,请参阅Auto-loading lib files in Rails 4

答案 2 :(得分:0)

Rails不会从非常见的位置加载文件。您需要告诉Rails services文件夹存在并从中加载文件。

将以下内容添加到config/application.rb

# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += [Rails.root.join('app', 'services')]