Javascript Erb 标签内的变量
Javascript variable inside Erb Tag
我正在尝试访问 erb 标记内 js.erb 文件中的 javascript 变量。例如
my_variable = window.location.pathname.split("/")[2];
@project = Project.find(my_variable)
那么有没有办法在 'find' 助手中传递 'my_variable'。
你可以很容易地使用 https://github.com/sstephenson/execjs ,如你所见
require "execjs"
ExecJS.eval "'red yellow blue'.split(' ')"
您可以轻松获取返回值。
另一种解决方案是获取 rails 端的 URI,获取项目并将它们解析为 JSON - 在 js.erb 中重新解析它们并发送文件内容到客户端。
这样你就不必在你的服务器上执行 JS,你仍然可以在你需要的 JS 文件中拥有项目。
This answer 解释了如何获取不同 rails 版本的请求 URI。
For Rails 3.2 or Rails 4+
You should use request.original_url
to get the current URL.
This method is documented at
http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url,
but if you're curious, the implementation is:
def original_url
base_url + original_fullpath
end
For Rails 3:
You can write
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
,
since request.url
is now deprecated.
编辑 (20-11-2015)
由于您似乎需要 url 的特定部分,您可以通过简单地调用 original_url.split('/')[2]
轻松地使用 ruby 模拟 JS 实现
我正在尝试访问 erb 标记内 js.erb 文件中的 javascript 变量。例如
my_variable = window.location.pathname.split("/")[2];
@project = Project.find(my_variable)
那么有没有办法在 'find' 助手中传递 'my_variable'。
你可以很容易地使用 https://github.com/sstephenson/execjs ,如你所见
require "execjs"
ExecJS.eval "'red yellow blue'.split(' ')"
您可以轻松获取返回值。
另一种解决方案是获取 rails 端的 URI,获取项目并将它们解析为 JSON - 在 js.erb 中重新解析它们并发送文件内容到客户端。
这样你就不必在你的服务器上执行 JS,你仍然可以在你需要的 JS 文件中拥有项目。
This answer 解释了如何获取不同 rails 版本的请求 URI。
For Rails 3.2 or Rails 4+
You should use
request.original_url
to get the current URL.This method is documented at http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url, but if you're curious, the implementation is:
def original_url base_url + original_fullpath end
For Rails 3:
You can write
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, sincerequest.url
is now deprecated.
编辑 (20-11-2015)
由于您似乎需要 url 的特定部分,您可以通过简单地调用 original_url.split('/')[2]