在 ERB 中使用参数调用 ruby 方法?

calling ruby methods with arguments inside ERB?

我正在 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

好的...首先您需要了解 erb 的工作原理。

在控制器操作结束时:Rails 解析 erb 并首先运行所有 ruby 并使用它生成一些 html+js 代码...此时点,表示 <%= link_onedrive %> 的位被调用 link_onedrive 方法的结果完全覆盖......它不再存在于 html 中。

然后 html+js 被发送到浏览器,浏览器(在客户端机器上)运行此时已经创建的 js。

您不能从 javascript 调用 ruby,因为到那个阶段,已经没有 ruby 了...只有 javascript.

如果您想从 javascript 中调用 ruby 方法 - 您可能需要设置一个 ajax-post,post 用于一个运行 ruby 的控制器,然后 returns 一个 javascript 做某事的结果。

或者我们需要帮助您重写这两位代码...以其他方式获得您真正想要的东西(但要做到这一点,我们可能需要了解 link_onedrive 实际做了什么)