在Rails控制器中传递多个变量以呈现JSON

5
我正在尝试将数据从控制器传递到JavaScript。以下是如何实现:
respond_to do |format|
  format.html
  format.json { render json: {data: @data} }
end

然后在您的视图文件中,您应该这样做:

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json %>
<%end%>

<script>
  for( i = 0; i < data.length; i++ ) {
    alert(data[i]);
  }
</script>

有道理。对吧?

然而,上面的代码只是在json代码中传递一个变量,即数据变量。我需要做的是将多个变量传递给我的javascript代码。

应该这样做:

respond_to do |format|
  format.html
  format.json { render json: {data: @data, data1: @data1, data2: @data2} }
end

现在, - 我该如何在视图文件中访问data1和data2变量? - 我需要修改window.data吗?我尝试过下面的代码,但它没有成功。给了我一个参数错误。

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json, @data1.to_json %>
<%end%>

非常感谢您的垂询。

谢谢!

1个回答

8
render json调用将渲染单个对象,因此请尝试将所有数据存储在一个JSON对象(或数组)中:
respond_to do |format|
  format.html
  format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}}
end

在前端:

<%= javascript_tag do%>
  window.data = <%= raw @all_data.to_json %>
<%end%>

现在,window.data 中应该包含你需要的所有内容,分别位于 window.data.datawindow.data.data1window.data.data2


谢谢您的回复。然而,很抱歉告诉您我无法看到预期的结果。我按照您要求的做了,但在我的JavaScript中执行alert window.data时,它返回null。 - Rahul Bhargava
如果你展示你的 Ruby 模型,你还需要在其中创建 all_data。我可以尝试进行更新。 - hagope
有趣。虽然,如果我传递单个变量,我不需要创建任何东西。顺便问一下,我应该如何将它添加到模型中呢? - Rahul Bhargava
1
学习创建ActiveRecord模型,请参考[http://guides.rubyonrails.org/active_record_basics.html#creating-active-record-models],上面的代码是一种hack方法。理想情况下,建议使用`render json: @product`并将模型定义放在models/product.rb中。另外,还需要学习布局和渲染,请参考[http://guides.rubyonrails.org/layouts_and_rendering.html]。 - hagope
尽管我已经了解了大多数这些模型和布局/渲染,但我还是快速浏览了您给出的页面。但不幸的是,我还是无法理解它。我需要用Ruby模型创建什么?哪个模型? - Rahul Bhargava
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接