Есть следующая структура:
app/controllers/searches_controller.rb
class SearchesController < ApplicationController
def index
query = params[:q]
resp_query = SomeModel.find(:all, :conditions => ['some_name_column LIKE ?', "%#{query}%"])
@resp_query_second = MyFetchSearch.fetch_search_threads(resp_query)
end
end
lib/my_fetch_search.rb
class MyFetchSearch
def self.fetch_search_threads(query)
query.each do |q|
threads << Thread.new do
if q.api_has == true
q.some_api_name.safe_constantize.hello
else
q.name
end
end
end
end
end
lib/api_files/api_one.rb
class ApiOne
def self.hello
"Hello, i'm Api One!"
end
end
в коде возможна опечатка, описал суть проблемы. по факту реальный код отличается от изложенного
Теперь о непонятной мне странности Thread )
Очень кратко: хочу совместить результат выборки из бд и из определенных api через Thread т.к. циклом получается дольше...
Более подробней: есть некий контроллер который принимает поисковый запрос. Далее ищем в некой модели то, что запросили. В данной модели есть свойство (колонка в бд) имя некого api (их несколько штук). Есть директория lib/api_files/ в ней хранятся файлы с классами разных api у всех есть одинаковые методы но с разным функционалом. При использовании потоков эти классы, как я понимаю, не подключаются. т.к. если их по отдельности подключить в MyFetchSearch то все работает. если убрать цикл потока threads << Thread.new do ... end и НЕ подключать классы, то тоже все работает. Вопрос: почему так происходит?
Я понимаю что можно тупо все эти классы подключить и забыть, но мне так не подойдет т.к. этих классов будет много... Нужно сделать потоки без подключения этих классов.
п.с. на борту Rails 5.1.3, RubyMine, Win 7