【问题标题】:calling ruby methods with arguments inside ERB?在 ERB 中调用带有参数的 ruby​​ 方法?
【发布时间】: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


【解决方案1】:

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

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

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

你不能从 javascript 调用 ruby​​,因为到那个阶段,没有 ruby​​ 剩下...只有 javascript。

如果您想从您的 javascript 调用 ruby​​ 方法 - 您可能需要设置一个 ajax-post 来发布到运行 ruby​​ 的控制器,然后返回 javascript 执行某些操作的结果。

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

【讨论】:

  • 这意味着可以调用所有具有常量值的 ruby​​ 方法,但我们不能使用 ruby​​ 函数处理动态值。对!
  • 您可以,您只需要在 ruby​​ 中实际拥有变量,而不是在 javascript 中;)或在获得值后从 javascript 发布到 ruby​​。
  • 如何分配 response.data.files[0];到一个红宝石变量。
  • 我不知道response.datas.files[0] 是什么,它是如何设置的? ruby params 哈希中是否提供相同的信息?
  • 现在...你需要尝试 AJAX 的东西 - 如果你以前没有做过,你可以用谷歌搜索。这样做超出了这个问题的范围...所以...自己尝试一下...如果遇到困难,请返回 Stack Overflow 并提出 new 问题(我们完成后需要立即关闭它)
猜你喜欢
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多