Вы пытаетесь позволить рельсам выполнять все вычисления через серию циклов;Не удивительно, что это занимает так много времени.
Трудно следовать, но, возможно, вместо использования петель .each
, попробуйте вытащить все, что вам нужно сразу же, а затем используйте .group_by(&:attribute)
ИЛИ, если ваш конечный результатЭто просто регистрация на карте.
Кажется, вы пытаетесь привлечь всех пользователей, у которых есть что-то нужное, почтовый индекс, тема или пол.Итак, пусть база данных сделает всю работу.
my_zips = @zip_codes = self.distributions.map(&:zip_code).compact.join(", ")
my_sexes = @sexes = self.distributions.map(&:sex).compact.join(", ")
all_cards = CardSignup.find(:all, :conditions => ["sex IN (?) OR zip_code IN (?)", my_sexes, my_zips])
my_topics = @topics = self.distributions.map(&:me_topic).compact.join(", ")
all_topics = MeTopic.find(:all, :conditions => ["name = ?", my_topics])
more_cards = all_topics.map{|x| x.users}.map{|n| n.card_signup}
total_number = (all_cards + more_cards).flatten.uniq
Надеюсь, это лучший ответ.