我想跳转到一个“导入函数”,它可以是我已经在 lib/import/... 中编写的文件之一。
用户在选择框中选择一个选项,从这个选择中,我想在一个上传的文件上执行特定部分的代码(导入具有不同可能布局的 excel)
我写了这个:
# Loading and executing the template chosen by user at step 1
template_path = 'import/'+params[:template]+'/import.rb'
require template_path
Import.action(filename, session, params, current_project)
我有几个 import.rb 文件,每个文件都位于一个单独的目录中。其中之一是:
module Import
require 'spreadsheet'
def Import.action(filepath, session, params, project)
# My import code
end
end
问题是 Rails 总是从lib/firstdirectory/import.rb的第一个目录调用 action 方法
我从来没有到达位于 lib/otherdirectory/import.rb 中的另一个 import.rb 文件
- 有没有更好的方法来实时执行“跳转到”功能?
- 为什么 Rails 总是跳转到相同的功能?
编辑 :
我的 application.rb 配置文件包含
config.autoload_paths += Dir["#{config.root}/lib/import/**/"]
编辑 2:
# lib/importer/importer.rb
module Importer
class Base
# Whatever common logic the import.rb files have.
end
end
#lib/importer/Import_test/import_test.rb Note the Big letter for the directory (constant)
module Importer
class Import_test < Base
def self.import
logger.debug(">>>>>>>>>>>>> special function Test <<<<<<<<<<<<<<<<<<<<")
end
end
end
# Call from controller
logger.debug "------------------>> "+params[:template]
raise "Invalid input" unless params[:template].constantize.superclass == Importer::Base
params[:template].constantize.import()
params[:template] 返回字符串 Importer::Import_test(大写字母)
我收到错误:NoMethodError(Importer::Import_test:Module 的未定义方法“超类”):app/controllers/import_controller.rb:57:in `step2'