【问题标题】:Pass multiple variables to render json in rails cotroller传递多个变量以在 Rails 控制器中呈现 json
【发布时间】:2015-04-10 16:30:13
【问题描述】:

我正在尝试将数据从控制器传递到 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%>

任何线索将不胜感激。

干杯!

【问题讨论】:

    标签: javascript ruby-on-rails json ruby-on-rails-4


    【解决方案1】:

    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。
    • 您还需要在您的 ruby​​ 模型中创建all_data,如果您显示您的模型,我可以尝试更新...
    • 有趣。虽然,如果我传递单个变量,我不需要创建任何东西。我应该如何将它添加到模型中?
    • 继续阅读creating ActiveRecord Models ...我们上面的内容是一个hack,理想情况下,您希望拥有render json: @product并将您的模型定义放在models/product.rb ...另请阅读layouts and rendering
    • 虽然我知道大部分这些模型和布局/渲染,但我还是快速浏览了您提供的页面。但不幸的是,我无法克服它。我需要在 ruby​​ 模型中创建什么?哪个型号?
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 2015-02-03
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多