我在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
答案 0 :(得分:3)
好的......首先你需要了解erb是如何工作的。
在控制器操作结束时:Rails解析erb并首先运行所有ruby并使用它生成一些html + js代码......此时,<%= link_onedrive %>
的位被完全覆盖通过调用link_onedrive
方法的结果......它不再存在于html中。
然后将此html + js发送到浏览器,并且浏览器(在客户端的计算机上)运行此时已创建的js。
你无法通过javascript调用ruby,因为在那个阶段,没有红宝石......只是javascript。
如果你想从你的javascript中调用ruby方法 - 你可能需要设置一个发布到运行ruby的控制器的ajax-post,然后返回javascript所做的结果。
或者我们需要帮助你重写两位代码......以其他方式获得你真正想要的东西(但要做到这一点,我们可能需要看看link_onedrive
实际上做了什么)