如何从原始数据(数据库数据)创建自定义json

时间:2015-12-12 11:36:44

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

我在tour控制器中创建了一个show方法,并希望将数据库中的数据渲染为json格式。 这是巡视控制器的定义

class ToursController < ApplicationController

    respond_to :json

        def show    
            @tourcategory = Tourcategory.find(params[:id])
            @tours= @tourcategory.tours
            @tourcategories = Tourcategory.all
            render :layout => false

        end
    end

这是show.html.haml视图的定义

    %h3 Tour for #{@tourcategory.title}
    = @tours.to_json

此代码的输出如下:

[{"content":"dscfds","created_at":"2015-12-12T09:48:32Z","elementid":"test1","id":8,"jobid":2,"next_button_title":"next","priority":23,"title":"test1","updated_at":"2015-12-12T09:48:32Z"}]

但我只是想以这种json格式呈现数据,如下:

var tour = {
  id: "tour",
  steps: [
    {
      title: "abc",
      content: "Click this  Button.",
      target: "#abc",
      placement: "bottom",
      showNextButton: false,
      skipIfNoElement : true
    },

1 个答案:

答案 0 :(得分:0)

我们不清楚您要尝试实现的目标,但在我看来,您希望从@tours中提取某些属性并将其分组为数组,如果这样做的话。你可以做这样的事情:

(列出t.attributes.slice()内所需的所有属性)

tour = { id: "tour", steps: @tours.map { |t| t.attributes.slice("title", "content", "target") } }

如果您想将密钥从snake(下划线)转换为驼峰格式:

tour = {
        id: "tour",
        steps: @tours.map {|t| t.attributes.slice("title", "content").map {|k,v| [k.camelize(:lower), v]}.to_h} 
       }