0

我有一个视频名称数组,我想从这个数组中获取一个随机视频名称。但是当我调用一个辅助方法来完成这一切时,我每次都会得到相同的随机数和随机视频。

我相信这是因为即使我试图多次“调用”辅助方法,它也只被调用一次,只是该方法的结果被多次“调用”。

所以我在想的是找到一种将 JavaScript 变量发送到辅助方法的方法,但我不知道(谷歌也不知道)如何最好地做到这一点。

为简单起见,每次只尝试获取一个新的随机数:

JS:

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

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

html.erb:

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

每次显示相同的随机数。

4

1 回答 1

0

要求

Rails 处理“请求”

因为 Rails 是服务器端的,所以它处理这些请求以“渲染”您在屏幕上看到的页面/视图。每个请求都是单独处理的,这意味着您必须传递服务器为您呈现正确视图所需的所有内容

您提到的问题是您正在尝试使用已经呈现的数据。当您向 Rails 发送 HTTP 请求时,“帮助”视图被渲染,因此将一遍又一遍地使用相同的数据


客户端与服务器端

您看到的问题来自client-side(JS)和server-side(Rails)之间的差异。不同之处在于您无法从 JS 访问 Rails,除非您发送“请求”(可能通过ajax

为了从客户端触发 Rails,你必须发送一个请求。这可以通过浏览器单击或 Ajax 完成


你的问题

您正在尝试从 Rails 加载 1 和 10 之间的随机数

如果您使用正确的函数/代码,这可以完全由 JS 处理

或者,您可以使用 Ajax 从 Rails 请求帮助程序,但这非常低效,因为它会向服务器发送不必要的请求

于 2013-12-26T14:31:49.640 回答