【问题标题】:Sending data from Ruby(rails) code to javascript/jquery将数据从 Ruby(rails) 代码发送到 javascript/jquery
【发布时间】:2012-03-18 21:17:46
【问题描述】:

我最近开始从事一个涉及 ruby​​ on rails/javascript/jquery 的项目。我对这一切都很陌生。我参与的部分是这样的。用户点击一个按钮。将打开一个对话框,用户将在其中输入要搜索的术语。使用该术语,我将通过查看 xml 来构建 URI。然后我将进行 REST 调用。响应将是一个 XML 文件。我将解析它并在用户输入要搜索的术语的同一对话框中显示数据。

我正在使用 JQuery 创建一个对话框。我正在 ruby​​ 代码(Helper 类)中进行解析和 REST 调用部分。我没有使用模型和控制器。现在我需要将数据从辅助方法发送到 erb 文件,我将在其中将数据显示为表格。输出会是这样的

string11 string12 string13
字符串 21 字符串 22 字符串 23
字符串31 字符串32 字符串33
. . .
. . .

目前,在 ruby​​ 代码中,我为每一列创建了 3 个数组。我不确定如何将数据从 ruby​​ 发送到 html/javascript。如果有更好的方法可以做到这一点,请告诉我。例如:与其作为 3 个单独的数组发送,不如作为 xml/json 发送更好?或者任何其他建议都会非常有帮助。主要是我不了解如何将这些数据发送到 erb 文件。提前谢谢你。

编辑:添加示例代码

Javascript/Jquery -

单击按钮时,我想在 erb 文件中调用 ruby​​ 方法 例如: erb 文件还有其他 javascript/html 代码来显示其他内容。

在辅助方法中我有 getUserList 方法

def getUserList(search)
uri = create_url(search)
@doc = Nokogiri::HTML(open(uri))
//Doing parsing and other stuffs here
//creating 3 array as mentioned above which needs to be displayed
end

我希望显示以上数组。我不确定如何将这些数组发送到调用此方法的 erb 文件

【问题讨论】:

  • 你有一些到目前为止你尝试过的示例代码吗?我对你想要做什么感到有点困惑。你说你在模型和控制器中进行解析和REST调用not?那么,根据定义,它不是不是 REST 调用吗?也许你的红宝石的一些示例代码,以及你现在拥有的 jquery/html(尽量使它成为最简单的版本,作为概念证明)
  • 抱歉不清楚。我正在对其他一些不是我编写的 Web 服务进行 REST 调用。例如,我正在对 twitter REST API 进行 REST 调用。在对话框中,用户将输入一个术语 ex:用户进行搜索。根据搜索词,我正在进行 REST 调用以在 twitter 中搜索用户。我将使用示例代码更新我的帖子。

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

在您的控制器中:

def users
  respond_to do |format|
    format.js do
      render(:js => "callback(#{@users.to_json});")
    end
  end
end

在你的 HTML 中使用类似这样的东西来调用它:

<%= link_to_remote "get users", :url => { :action => "users" } %>

更多关于从 Rails 操作中渲染原生 JavaScript 的信息:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-vanilla-javascript

此示例使用 JSON 数据构造 JavaScript,该 JavaScript 在您的 JavaScript 代码中调用“callback()”函数。您的回调函数将收到一个易于解析的 JSON 字符串。如果你真的想要,你也可以使用 to_xml 来发送 XML,但是解析 JSON 更简单更快。

在此示例中您不需要帮助程序,因为包含数据的 JavaScript 调用将直接来自您的控制器。没有视图模板,因此您不需要助手。获取 @users 的代码的最佳位置是在 User 模型类中。不是 Active Record 模型,只是一个普通模型。从远程 REST API 获取用户的代码可能是一个类方法。 (如果你觉得懒惰,那么你可以在“用户”控制器操作中设置 @users 和 REST API 响应。但这不是 Rails 的理想用途,因为 Rails 的全部意义在于 MVC。)

如果您使用的是 jQuery,那么您也可以使用 jQuery 的 getJSON() 函数,这样您的控制器将只发送 JSON 数据而不使用回调:http://api.jquery.com/jQuery.getJSON/

请注意,这似乎是您正在寻找的简单答案,但对于更复杂的应用程序,这并不是执行此类事情的最佳方法。目前做这种事情的最好方法是使用 Backbone.js 之类的东西。 http://documentcloud.github.com/backbone/ 使用 Backbone.js,您可以在 JavaScript 中定义“用户”集合,设置该集合的 REST URL(它可以是您的 Rails 应用程序中的 URL,它从其他 API 中继数据)然后您只需调用users.fetch() 在你的 JavaScript 中加载数据。它与 Active Record 非常相似,但用于客户端站点。这样做更好,因为它抽象了流程并允许您更新和删除记录以及简单地列出它们。

【讨论】:

  • 谢谢。我在我的项目中使用了 Vanilla javascripts 和 getJSON。帮助很大
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 2012-06-27
  • 2016-05-11
  • 2019-09-14
  • 2013-01-31
  • 2019-01-07
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多