在Rails中使用RABL呈现简单的JSON数组

4

我一直在尝试找出如何让RABL渲染一个非常简单的字符串JSON数组,例如:["my,"array","of","strings"]

控制器将是:

class StringsController < ApplicationController
    responds_to :json

    def index
        @string = ['my','array','of','strings']
        respond_with @strings
    end

end

而 RABL 视图必须以以下内容开头:

collection @strings, root_object: false

但我无法想出如何仅输出字符串而不带节点名称或在对象中...

显然,有一种更简单的解决方案来实际提供JSON数组,就像我下面所写的那样,但我特别想知道为什么在RABL中这看起来如此复杂!

class StringsController < ApplicationController

    def index
        render json: ['my','array','of','strings']
    end

end

在rabl中,集合将采用JSON对象而不是数组。 - Bharat soni
3个回答

1
为了补充Mark的答案,我认为这个方法可行:
collection @string, object_root: false

node :value do |s|
  s 
end

注意我添加了:value,它是JSON记录的标签。

有没有办法使用动态键而不是静态键作为值? - Mothirajha

1

Neill,

这个方法适用于任何数组,但对于你特定的数组,确切的答案是...

在 index.json.rabl 中使用以下代码

collection @string, object_root: false

node do |s|
  s 
en

在你的控制器中使用...
def index 
    @string = ["my","array","of","strings"]
end

1
很抱歉,这对我不起作用。您提供的RABL模板生成JSON [{},{},{}],而不是['my','array','of','strings'](如果有任何区别,我正在使用RABL版本0.9.3) - neill
我看到你的数组在@string中,现在尝试使用它,但不要使用respond_with,只需使用render并在index.json.rabl中使用我的响应。 - Mark Ellul
我尝试将其设置为RABL模板上的视图规范,使其与控制器分离,但它仍然只呈现空对象而不是字符串。 - neill
我注意到的一件事是你的数组被称为[at]string,而集合被称为[at]strings。尝试更改集合名称以匹配你正在使用的变量。你不需要respond_with,只需要一个render调用即可。 - Mark Ellul
糟糕..!很不幸,那只是我在开头帖子中输入的一个打字错误 :) 对于这个问题仍然没有运气,无论我是否使用#respond_to,我都得到了空对象数组。我决定转而看看jbuilder,它可以让我轻松地做到这一点。这似乎是放弃了,但我已经花了很多时间尝试找出如何使这个简单的表示工作.... - neill
很奇怪,因为我给你的代码正是我使用的。祝你在jbuilder上好运,我从未使用过它。 你能发布一下你正在使用的rabl模板吗? - Mark Ellul

-2

你可以这样做,而不需要使用rabl视图来显示响应。

def index
    @string = ['my','array','of','strings']
    respond_to do |format|
      format.json  { render :json => {:message => "Success", :my_string => @string } }
      format.xml
    end
  end

那个解决方案不能呈现一个简单的字符串数组,也没有回答我的问题,即如何使用RABL呈现数组。我希望JSON输出只是["my,"array","of","strings"],虽然还有其他方法,但我想特别知道如何在RABL中实现这一点。 - neill

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