@Vadim-55

Потоки (Thread) в Rails и метод .safe_constantize не работает?

Есть следующая структура:
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
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы