【发布时间】:2015-04-21 04:27:45
【问题描述】:
我将响应存储在 javascript 变量中。这是在 .html.erb 文件中。
var file = response.data.files[0];
我第一次打电话是用
var f = "<%=link_onedrive%>"
这成功调用了方法link_onedrive
然后我打了这个电话
var f = "<%=link_onedrive(%>file<%=)%>"
会报错
wrong number of arguments (0 for 1)
我的问题是如何使用来自 erb 的参数进行 ruby 方法调用。
已编辑
这是我的 link_onedrive
def link_onedrive(file)
uri = URI.parse("https://api.onedrive.com/v1.0")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new("https://api.onedrive.com/v1.0/drive/items/file.link/action.createLink)
req.content_type = "application/json"
req.body = '{"type" : "view"}'
response = http.request(req)
arr = JSON.parse(response.body)
arr["link"]["webUrl"]
end
【问题讨论】:
-
好的...首先您需要意识到 ruby 会解析 erb 并运行所有 ruby first 并生成一些 html+js 代码...然后发送到浏览器和浏览器运行此时已经创建好的js。你不能从 javascript 调用 ruby,因为到那个阶段,没有 ruby 剩下了......只有 javascript
-
但是,在这种情况下,我的第一个电话是成功的。方法 link_onedrive 在应用程序帮助器中,它第一次被调用。我第二次通过的论点是问题
-
是的...但是实际上不可能做您在上面尝试做的事情...因为当您拥有 javascript 'file' 变量时 - 运行任何 ruby 都为时已晚.如果有办法在 ruby 解析部分(而不是 javascript 运行部分)获取文件,则可以将其传递给 ruby。
-
如果您向我们展示了
link_onedrive的实际作用,我们或许会为您提供帮助 -
好的 - 看起来这可以很容易地转换为返回所需 url 的新控制器操作,然后您的 javascript 可以使用 AJAX 将文件名发布到该操作并获取 url。
标签: javascript ruby-on-rails ruby erb