Используйте оператор forkJoin для ожидания массива наблюдаемых, например:
const { forkJoin, of } = rxjs; // = require("rxjs")
// simulate API call
const fetchFromApi = id => of(`result: ${id}`);
const ids = [1, 2, 3, 4, 5];
const requests = ids.map(fetchFromApi);
forkJoin(requests)
.subscribe(e => console.log(e))
В то время как это работает, и я, как конечно, было известно, сделал это, это нарушает разделение MVC проблем. Помощники представления, как предполагается, не содержат логику контроллера/типа модели, которую это делает.
Вы могли бы рассмотреть рефакторинг этого назад в контроллер приложения. Помощники, как предполагается, для форматирования представления и материала, больше, чем как функция (который является тем, что я продолжал желать сделать, когда я начал.)
, Если Вы возвратились в свою модель Testimonail, сделайте мог бы сделать
def self.random
Testimonial.find(:first, :offset => rand(Testimonial.count))
end
затем в Вашем контроллере приложения, Вы могли сделать:
def random_testimonial
@random_testimonial ||= Testimonial.random
end
и вызов это от before_filter
Это имеет преимущество кладения обратно логики базы данных в модель, где это принадлежит.
Если я понимаю Вас правильно, Вы хотите метод, который возвращает тот же объект каждый раз, когда на него ссылаются в одном цикле запроса/ответа. Если это верно, можно достигнуть его с незначительным изменением помощнику:
def random_testimonial
@random_testimonial ||= Testimonial.find(:first, :offset => rand(Testimonial.count))
end
Уведомление "|| =" часть. Это - идиома Ruby, которая говорит: присвойте значение @random_testimonial, если он уже не имеет значение.
Hope, которая отвечает на Ваш вопрос.