2

在 Rails 中,这是我当前生成的一个 api 响应,作为来自 /charts_json/south_carolina.json 的响应(例如)

[{"d_s":0,"name":"summerville"},{"d_s":1,"name":"hilton head island"},{"d_s":2,"name":"north myrtle beach"},{"d_s":1,"name":"spartanburg"},{"d_s":12,"name":"greenville, sc"},{"d_s":0,"name":"aiken"},{"d_s":6,"name":"columbia"},{"d_s":4,"name":"myrtle beach"},{"d_s":1,"name":"simpsonville"},{"d_s":1,"name":"lancaster, sc"},{"d_s":0,"name":"north augusta"},{"d_s":0,"name":"sumter"},{"d_s":0,"name":"rock hill"},{"d_s":1,"name":"beaufort, sc"},{"d_s":1,"name":"mount pleasant"},{"d_s":21,"name":"charleston"},{"d_s":1,"name":"clemson"},{"d_s":1,"name":"anderson, sc"}]

现在我需要做的是像这样将上面的内容呈现为 json 文档

[['0', 'summerville'], ['1', 'hilton head island'], ...etc... ]

为了 SO 社区的利益和读者的澄清,如果我处理最后一件事情,我将包括我将用来完成这项工作的所有代码

除了我的charts_controller,我还生成了一个charts_json_controller 来响应json 请求——该控制器中的控制器方法的一个示例(这有点笨拙,但现在只要我能获得功能就可以了)

def south_carolina
    @locations = Location.find(1687).descendants #used acts_as_tree gem
    respond_to do |format|
      format.json { render json: @location.as_json(only: [:d_s, :name])}
end

在视图中(横截面)

function drawMarkersMap() {
    var data = google.visualization.arrayToDataTable([
      ['Startups', 'Location'],
      $.ajax({url: '/charts_json/south_carolina', dataType: 'json'})
  ]);
4

1 回答 1

1

不确定我是否理解正确,但这是一种将 json 作为数组而不是散列获取的方法。

为 Location 定义这个方法

上课地点
  def self.as_json_array
    as_json(仅: [:d_s, :name]).collect { |l| [l[:d_s], l[:name]] }
  结尾
结尾

如果需要,您可以使其更通用,但我想确保我首先了解您的要求。

然后只需在渲染行中使用该方法而不是 as_json 。

此外,听起来你知道这一点,但你真的应该只使用相同的控制器,并将任何自定义代码用于不同的格式放在你的 respond_to 块中。

于 2012-09-07T00:55:11.770 回答