Отправить переменную javascript вспомогательному методу rails

У меня есть массив имен видео, я хочу получить случайное название видео из этого массива. Но когда я вызываю вспомогательный метод, чтобы сделать все это, я получаю одно и то же случайное число и случайное видео каждый раз.

Я считаю, что это потому, что вспомогательный метод вызывается только один раз, хотя я пытаюсь "вызвать его" несколько раз, просто результаты этого метода "вызывают" несколько раз.

Поэтому я думаю найти способ отправить переменную JavaScript в вспомогательный метод, но я понятия не имею (и Google не знаю), как это лучше всего сделать.

Для простоты, просто пытаясь получить новое случайное число каждый раз:

JS:

function randomNumber() {
    alert("<%= random_number %>");
}

setTimeout(function(){
    randomNumber();
}, 2000);

html.erb:

helper_method :random_number
def random_number
  rand(0..10)
end

Одно и то же случайное число отображается каждый раз.

1 ответ

Запросы

Rails работает по "запросам"

Поскольку Rails находится на стороне сервера, он работает с этими запросами для "рендеринга" страниц / представлений, которые вы видите на своем экране. Каждый запрос обрабатывается индивидуально, что означает, что вы должны передать все, что потребуется серверу, чтобы отобразить для вас правильное представление

Проблема, на которую вы ссылаетесь, заключается в том, что вы пытаетесь использовать данные, которые уже были отрисованы. Представление "помощник" отображалось при отправке HTTP-запроса в Rails и, следовательно, будет использовать одни и те же данные снова и снова.


На стороне клиента и на стороне сервера

Проблемы, которые вы видите, проистекают из разницы между client-side (JS) и server-side (Rails). Разница в том, что вы не можете получить доступ к Rails из JS, если не отправите "запрос" (возможно, через ajax)

Чтобы запустить Rails со стороны клиента, вы должны отправить запрос. Это либо делается с помощью браузера, либо Ajax


Ваш вопрос

Вы пытаетесь загрузить случайное число между 1 и 10 из Rails

Это может быть полностью обработано JS, если вы используете правильные функции / код

В качестве альтернативы вы можете использовать Ajax для запроса помощника из Rails, но это крайне неэффективно, так как отправит ненужный запрос на сервер

Другие вопросы по тегам