【问题标题】:Send javascript variable to rails helper method将 javascript 变量发送到 rails helper 方法
【发布时间】:2013-12-25 19:22:48
【问题描述】:

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

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

所以我的想法是找到一种将 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

每次显示相同的随机数。

【问题讨论】:

  • 请分享您的辅助方法代码。问题很可能就在那里。
  • Ruby 是一种服务器端语言。这意味着一旦将信息发送给客户端,它将不会继续执行。有办法解决这个问题。最值得注意的是,AJAX。在这个简单的情况下。在 JavaScript 中创建一个随机数可能会更好。
  • 问题是,我需要将随机数发送给辅助方法,以便它可以从名称数组中获取随机视频名称。
  • 正如@JustinWood 所说,无法将javascript 变量传递给脚本中的ruby 代码。您必须通过发送 ajax 请求来完成。
  • 你可以做一件事,调用一个js函数并传递当时的视频数量,并使用该数字生成一个随机数,然后将这个随机数与请求一起发送。就像目前我有 20 个视频一样,然后我将在 20 上使用 random 函数,它会生成一个数字 14,例如,我会将 14 与我的请求一起发送到控制器,然后我会做任何我想做的事情。 :)

标签: javascript ruby-on-rails helpermethods


【解决方案1】:

请求

Rails 处理“请求”

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

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


客户端与服务器端

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

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


您的问题

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

如果你使用right functions / code,这可以完全由JS处理

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多