1
検索エンジンの実装がいくつかあるとします。Rails - Rails設定から名前空間の定数を取得する
module Searcher
module Engine
class Elasticsearch
end
class Algolia
end
end
end
環境ごとの検索エンジン設定が必要です。
は、私は(私は、特定の環境ファイルで上書き)Rails.application.configure do
config.search_engine = :elasticsearch
end
私の検索コントローラで次に
(ブリッジパターンのいくつかの並べ替えのために)私の環境での設定を宣言し、私はロードしたいです私はRails.configuration.search_engine私は完全な名前空間定数Searcher::Engine::XXX
FRを解決するにはどうすればよい
@search_engine = Searcher::Engine::XXX
@search_engine.search
に入れたシンボルに応じた適切なクラス記号:elasticsearch
は何ですか?
EDIT:
Searcher::Engine.const_get(Rails.configuration.search_engine.to_s.titleize)
は動作しません:(GEMから)それはElasticsearch
をロードしないSearcher::Engine::Elasticsearch
(私自身のコンポーネント)
::Searcher::Engine::Elasticsearch # => Searcher::Engine::Elasticsearch
Searcher::Engine.const_get(Rails.configuration.search_engine.to_s.titleize) # => Elasticsearch
Object.const_get("::Searcher::Engine::#{Rails.configuration.search_engine.to_s.titleize}") # => Elasticsearch
のRuby 2.3.0 Railsの5
'Elasticsearch :: Module :: Elasticsearch'と入力すると動作しますが、定数は実際にはここにあります。 –
@ CyrilDuchon-Dorisそれは奇妙です...レールコンソール 'Object.const_get( " :: Searcher :: Engine ::#{'elasticsearch'.titleize} " )' –
'Object.const_get Searcher :: Engine :: ElseSearch ") => Elasticsearch' –