在控制器内部构造json

时间:2016-04-27 20:02:05

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

我需要像这样做一个json结构,但是有多个项目:

charge = {
   items: [{
    name: "Product A",
    value: 1000,
    amount: 2
    }]
}

我的@items@items.pluck(:name, :price) 我试图像这样创建我的json:

  charge = {
   items: [{
    @items.each do |item|
     'name:' = item.name,
     'value:' = item.price,
     'amount:' = 2
    end
    }]
}

并返回此错误:

SyntaxError in CoursesController#qualquer

syntax error, unexpected '=', expecting keyword_end
'name:' = item.name,

我如何做这个结构?

1 个答案:

答案 0 :(得分:4)

有两件事我看错了。首先,您正在使用" ="运算符以设置Ruby哈希值。这是不正确的,因为Ruby哈希使用符号或字符串。所以你的哈希值需要如下所示:

{ "may_hash_key" => my.has_value }

{ my_hash_key: my.hash_value }

{ :may_hash_key => my.has_value }

选择。

此外,如果您从控制器操作渲染JSON,您可以执行以下操作:

def index
  # presumably some setup code
  charge = {
    items: @items.map do |item| {
      name:   item.name,
      value:  item.price,
      amount: 2
    } end
  }
  render json: charge
end

如果你没有从你的控制器动作渲染JSON,你可以做的是设置@charge并在视图中作为Ruby哈希与它交互。