如何在Rails中传递JavaScript变量;用户。选择(…)";

如何在Rails中传递JavaScript变量;用户。选择(…)";,javascript,ruby-on-rails,ruby,ruby-on-rails-6,Javascript,Ruby On Rails,Ruby,Ruby On Rails 6,我有两行代码: var itemname = document.getElementById("itemname"+x.toString()).value; var test = JSON.parse('<%= raw Item.select('promCode','baseCode','monadaMe','price','fpa').where(:itemName => 'itemname' ).collect { |p| [p.promCode, p.baseCode, p.

我有两行代码:

var itemname = document.getElementById("itemname"+x.toString()).value;

var test = JSON.parse('<%= raw Item.select('promCode','baseCode','monadaMe','price','fpa').where(:itemName => 'itemname' ).collect { |p| [p.promCode, p.baseCode, p.monadaMe, p.price, p.fpa] }.join("\n").gsub("\n", " ").split(" ")%>');
var itemname=document.getElementById(“itemname”+x.toString()).value;
var test=JSON.parse('itemname').collect{p |[p.promCode,p.baseCode,p.monadaMe,p.price,p.fpa]}.join(“\n”).gsub(“\n”,”).split(“”%>”);

我想将我的
var itemname
传递到
where(:itemname=>'itemname')

您不能使用JavaScript的模板文本,使用backtick吗?:

var test = JSON.parse(`<%= raw Item.select('promCode','baseCode','monadaMe','price','fpa').where(:itemName => '${itemname}' ).collect { |p| [p.promCode, p.baseCode, p.monadaMe, p.price, p.fpa] }.join("\n").gsub("\n", " ").split(" ")%>`);

您还可以查看“模板文本(模板字符串)”以了解更多信息。

将变量从客户端上运行的JavaScript传递到服务器上运行的Rails的唯一方法是发送HTTP请求

代码在两个完全独立的进程中运行,在不同的机器上和不同的时间。这不仅适用于rails,而且适用于在服务器上生成JavaScript的任何时候——使用任何语言/框架

您的
js.erb
模板首先通过服务器上的erb运行。它只是将其作为字符串缓冲区进行处理,并计算包含的任何ERB标记。Rails然后将结果发送给实际运行javascript的客户端。因此,当代码通过ERB运行时,rails完全不可能知道从一个甚至不存在的元素派生的变量的值


如果您想用服务器中的值填充a select,您需要对服务器执行一个操作,返回用于构建元素的JSON,或者使用
js.erb
模板呈现Javascript,如果您想进一步深入兔子洞,该模板会改变页面。

在该位置之外工作,但在该位置内部工作,我得到零value-1这基本上是不可能的,因为ERB模板在服务器上呈现,javascript在客户端运行。Backticks完全不相关。JS在浏览器中执行,而ruby仅在服务器上执行,因此您的查询不能依赖于呈现的DOM元素,因为它是在将文件发送到浏览器之前执行的。您可以向服务器发送带有AJAX请求的
itemname
,并在控制器中执行查询,呈现JSON
const name = 'kostasew';
const interpolated = `Hi there, ${name}!`;

console.log(interpolated); // prints 'Hi there, kostasew!