有没有办法将javascript变量传递给html.erb中的ruby方法

我正在尝试将变量传递给方法。 这是一个例子:

 var b = 1 var c = "string" + ""  

这不起作用。

这有效:

   var c = "string" + ""  

任何想法,将不胜感激。

您无法在Ruby方法中评估JavaScript变量。 此外,您当前的脚本必须位于资产管道之外,这通常是一种不好的做法。

一个简单的解决方案是将变量作为数据属性传递。 您将运行您的方法,然后在加载DOM后使用jQuery传递结果。 这允许您将JavaScript保留在资产管道中并将其传递给Ruby服务器端评估的数据。

注意: @b应该在您的控制器上定义:

 

另一个选择是使用 Rails中不显眼的JavaScript异步呈现脚本。

执行这项工作有一个很好的gem。 使用这个gem你可以这样做:

内控制器:

 gon.push(variable_name: 1) 

在你的js文件里面你可以检索这个变量:

 gon.variable_name 

它适用于:js或:咖啡文件。

Ruby代码在服务器上执行,而Javascript由客户端的浏览器执行。

标记为<%= %> Ruby代码在服务器上执行 然后传送到客户端,在该客户端将执行Javascript代码。 这就是为什么第一个片段不起作用而第二个片段不起作用的原因:在第二个片段中, <% @b = 1 %> 将HTML发送给请求者之前进行评估。

有了这样说,有一种方法可以做你想要的: 使用Ajax将Javascript变量传递给服务器,执行你需要的任何东西并将回复发送给客户端。

您需要更好地描述您的流程。

情况1:变量的值由用户操作决定。 然后对rails对象方法进行ajax调用,以获得js的计算值。

情况2:变量的值由app(服务器端)确定。 然后你可以这样做:

 <% @b = 1%>  

JS和服务器方法可以使用相同的值。 但这不是一个干净的方法。 视图不应设置值。

此外,按照@ jeffD23的建议,将js保留在资产管道中