如何在 Rails "User.select(...)" 中传递 JavaScript 变量
How to pass a JavaScript variable in Rails "User.select(...)"
我有两行代码:
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
传给 where(:itemName=> 'itemname')
。
你不能使用 JavaScript 的模板文字,使用反引号吗?:
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 中,您可以在 ${}
中使用反引号 ("``"),就像在 #{}
中使用双引号 (""
) 一样=28=] 插入文本。
因此,在 JavaScript 中:
const name = 'kostasew';
const interpolated = `Hi there, ${name}!`;
console.log(interpolated); // prints 'Hi there, kostasew!
您还可以查看 "Template literals (Template strings)1" 了解更多信息。
将变量从客户端的 JavaScript 运行ning 传递到服务器上的 Rails 运行ning 的唯一方法是发送 HTTP请求。
代码 运行 在两个完全独立的进程中,在不同的机器上,在不同的时间。这不仅适用于 rails,而且任何时候您在服务器上生成 JavaScript - 在任何 language/framework.
您的 js.erb
模板首先 运行 通过服务器上的 ERB。它只是将其作为字符串缓冲区处理并评估包含的任何 ERB 标签。 Rails 然后将结果发送给实际上 运行 是 javascript 的客户端。因此,rails 完全不可能知道从一个元素派生的变量的值,当代码是 运行 通过 ERB 时,该元素甚至可能不存在。
如果您想用您服务器的值填充 select,您需要对您使用的 returns JSON 服务器执行 AJAX request构建由 js.erb
模板呈现的元素或 javacript,如果您想深入那个兔子洞,它会改变页面。
我有两行代码:
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
传给 where(:itemName=> 'itemname')
。
你不能使用 JavaScript 的模板文字,使用反引号吗?:
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 中,您可以在 ${}
中使用反引号 ("``"),就像在 #{}
中使用双引号 (""
) 一样=28=] 插入文本。
因此,在 JavaScript 中:
const name = 'kostasew';
const interpolated = `Hi there, ${name}!`;
console.log(interpolated); // prints 'Hi there, kostasew!
您还可以查看 "Template literals (Template strings)1" 了解更多信息。
将变量从客户端的 JavaScript 运行ning 传递到服务器上的 Rails 运行ning 的唯一方法是发送 HTTP请求。
代码 运行 在两个完全独立的进程中,在不同的机器上,在不同的时间。这不仅适用于 rails,而且任何时候您在服务器上生成 JavaScript - 在任何 language/framework.
您的 js.erb
模板首先 运行 通过服务器上的 ERB。它只是将其作为字符串缓冲区处理并评估包含的任何 ERB 标签。 Rails 然后将结果发送给实际上 运行 是 javascript 的客户端。因此,rails 完全不可能知道从一个元素派生的变量的值,当代码是 运行 通过 ERB 时,该元素甚至可能不存在。
如果您想用您服务器的值填充 select,您需要对您使用的 returns JSON 服务器执行 AJAX request构建由 js.erb
模板呈现的元素或 javacript,如果您想深入那个兔子洞,它会改变页面。