lib/import/...
ユーザーが選択ボックスでオプションを選択し、この選択から、アップロードされた 1 つのファイルでコードの特定の部分を実行したい (さまざまなレイアウトで 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 ファイルがあります。これらの1つは次のとおりです。
module Import
require 'spreadsheet'
def Import.action(filepath, session, params, project)
# My import code
end
end
問題は、Rails が常にlib/firstdirectory/import.rbの最初のディレクトリからアクション メソッドを呼び出していることです。
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'