首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails ActiveAdmin中使用ActiveAdmin

在Rails ActiveAdmin中使用ActiveAdmin
EN

Stack Overflow用户
提问于 2015-04-01 15:48:25
回答 1查看 852关注 0票数 1

我正在用Rails 4构建一个应用程序,我使用ActiveAdmin设计了一个管理站点。它工作得很好,但是现在我想使用D3.js将图表添加到我的索引页面中,通过呈现一个分部。D3.js图书馆给我留下了深刻的印象,但是我对它很陌生,所以我一直在尝试一些新的训练。

我还没有在互联网上找到任何关于这个特定案例的信息,所以我尝试通过这个很好的教程:在Rails中使用D3来做。我已经包括了D3.js库,下面是本教程。我的部分看起来是这样的:

代码语言:javascript
复制
#app/views/admin/_chart.html.erb
<h3>HELLO WORLD!</h3>
<svg id="graph"></svg>

管理user.file如下所示:

代码语言:javascript
复制
#app/admin/user.rb
collection_action :data, method: :post do
    respond_to do |format|
          format.json {
            render :json => [1,2,3,4,5]
          }
     end
  end

然后,我在资产/javascript/Graph.js中得到了下面的脚本:

代码语言:javascript
复制
$.ajax({
           type: "GET",
           contentType: "application/json; charset=utf-8",
           url: 'data',
           dataType: 'json',
           success: function (data) {
               draw(data);
           },
           error: function (result) {
               error();
           }
       });

function draw(data) {
    var color = d3.scale.category20b();
    var width = 420,
        barHeight = 20;

    var x = d3.scale.linear()
        .range([0, width])
        .domain([0, d3.max(data)]);

    var chart = d3.select("#graph")
        .attr("width", width)
        .attr("height", barHeight * data.length);

    var bar = chart.selectAll("g")
        .data(data)
        .enter().append("g")
        .attr("transform", function (d, i) {
                  return "translate(0," + i * barHeight + ")";
              });

    bar.append("rect")
        .attr("width", x)
        .attr("height", barHeight - 1)
        .style("fill", function (d) {
                   return color(d);
              });

    bar.append("text")
        .attr("x", function (d) {
                  return x(d) - 10;
              })
        .attr("y", barHeight / 2)
        .attr("dy", ".35em")
        .style("fill", "white")
        .text(function (d) {
                  return d;
              });
}

function error() {
    console.log("error");
}

当我显示页面时,部分被正确加载(至少是标题),并且有一个图表的空间,但它是空的。我在控制台中没有错误,所以我甚至可能不会上传graph.js文件,或者数据可能不会被传输到聊天中。或者两者都有。不管怎么说,我真的不知道为什么都不明白,所以你的帮助会非常感谢。谢谢

S.

编辑

我已经更改了route.rb文件中的路由:

代码语言:javascript
复制
resources :users do
    collection do
    ...
    get :data , :defaults => { :format => 'json' }
    end
end

然后,我将js文件的名称从graph.js更改为users.js。然后,我将url更改为:“用户/数据”:

代码语言:javascript
复制
    $.ajax({
               type: "GET",
               contentType: "application/json; charset=utf-8",
               url: 'users/data',
               dataType: 'json',
               success: function (data) {
                   draw(data);
               },
               error: function (result) {
                   error();
               }
           });
...

这样,我就可以在应用程序的索引页中显示图表。但是,我仍然不能在ActiveAdmin中显示它.我想知道是因为我没有正确地将d3包含在ActiveAdmin中(在供应商文件夹中),还是因为它是路由问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 13:56:04

好的,我找到了一种方法,可以在我的活动管理页面中找到一个简单的D3条形图。

这就是我在/admin/user页面中显示图表时所做的工作:

代码语言:javascript
复制
#app/admin/user.rb

ActiveAdmin.register User do
...
  collection_action :data, :method => :get do
      respond_to do |format|
      format.json {
        render :json => [1,2,3,4,5]
      }
      end
  end

#app/views/admin/_charts.html.erb

<h3>User chart</h3>
<svg id="graph"></svg>
<script type="text/javascript">
$.ajax({
           type: "GET",
           contentType: "application/json; charset=utf-8",
           url: 'users/data',
           dataType: 'json',
           success: function (data) {
               draw(data);
           },
           error: function (result) {
               error();
           }
       });

function draw(data) {
    var color = d3.scale.category20b();
    var width = 420,
        barHeight = 20;

    var x = d3.scale.linear()
        .range([0, width])
        .domain([0, d3.max(data)]);

    var chart = d3.select("#graph")
        .attr("width", width)
        .attr("height", barHeight * data.length);

    var bar = chart.selectAll("g")
        .data(data)
        .enter().append("g")
        .attr("transform", function (d, i) {
                  return "translate(0," + i * barHeight + ")";
              });

    bar.append("rect")
        .attr("width", x)
        .attr("height", barHeight - 1)
        .style("fill", function (d) {
                   return color(d);
              });

    bar.append("text")
        .attr("x", function (d) {
                  return x(d) - 10;
              })
        .attr("y", barHeight / 2)
        .attr("dy", ".35em")
        .style("fill", "white")
        .text(function (d) {
                  return d;
              });
}

function error() {
    console.log("error");
}
</script>

然后,将其显示在仪表板上:

代码语言:javascript
复制
#app/admin/dashboard.rb

ActiveAdmin.register_page "Dashboard" do
...
  section do
    div do
      render 'admin/users/charts'
    end
  end
...
end

我希望这对你有用。现在,我将尝试将数据传递到另一种图表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29395263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档