我已经创建了一个lib / services / my_service.rb文件。
# /lib/services/my_service.rb
class MyService
...
end
我想在app / controllers / my_controller
中使用它class MyController < ApplicationController
def method
service = MyService.new()
end
我收到的错误是MyService是一个未初始化的常量。我试图用
导入它require '/lib/services/my_service.rb'
但我得到了
cannot load such file -- /lib/services/my_service.rb
编辑:我已尝试使用
从application.rb进行自动加载config.autoload_paths << Rails.root.join('lib')
但没有骰子。仍未获得未初始化的常量MyController :: MyService
答案 0 :(得分:10)
Ruby on Rails具有某些支持自动加载的命名约定。
如果模型/类结构为lib/services/my_service.rb
,Rails会自动加载位于Services::MyService
的文件。
将您的lib/services/my_service.rb
更改为:
module Services
class MyService
# ...
end
end
在你的控制器中使用这样的类:
service = Services::MyService.new
请注意,根据您的Ruby on Rails版本,您可能需要将lib
文件夹添加到自动加载文件时使用的文件夹列表中:
# add this line to your config/application.rb:
config.autoload_paths << "#{Rails.root}/lib"
在Rails指南中阅读有关autoloading的更多信息。
答案 1 :(得分:2)
您可能需要从lib/
文件夹中的文件启用自动加载:
# config/application.rb
config.autoload_paths << "#{Rails.root}/lib"
如果您希望“手动”执行此操作,则只能在同一文件中要求此类文件:
# config/application.rb
require './lib/my_service'
此后需要重启。
答案 2 :(得分:0)
config / application.rb中有一个设置,您可以在其中指定包含要自动加载的文件的目录。
来自application.rb:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
或
config.autoload_paths += Dir["#{config.root}/lib/**/"]
rails 3
Dir["lib/**/*.rb"].each do |path|
require_dependency path
end
答案 3 :(得分:0)
将此添加到您的应用程序中。rb
values = np.where(df.eq(1), df.columns, df)
df = pd.DataFrame(values, columns=df.columns)
0 1 2 3 4 5
0 abc 0 2 0 0 5
1 bcd 0 0 3 0 0
2 def 0 0 0 4 0