首页 > 解决方案 > 如何在 Rails“User.select(...)”中传递 JavaScript 变量

问题描述

我有两行代码:

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的 to where(:itemName=> 'itemname')

标签: javascriptruby-on-railsrubyruby-on-rails-6

解决方案


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

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

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

如果要使用来自服务器的值填充 a 选择,则需要向服务器执行AJAX 请求,该请求返回用于构建元素的 JSON 或由模板呈现的 javacript,js.erb如果您想更进一步,该模板会更改页面在那个兔子洞里。


推荐阅读