在ERB中调用带有参数的ruby方法?

时间:2015-04-21 04:27:45

标签: javascript ruby-on-rails ruby 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

1 个答案:

答案 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实际上做了什么)