Ruby on rails Rails 4-在JSON对象中以单一形式保存多个值和/或

Ruby on rails Rails 4-在JSON对象中以单一形式保存多个值和/或,ruby-on-rails,arrays,json,ruby,ruby-on-rails-4,Ruby On Rails,Arrays,Json,Ruby,Ruby On Rails 4,此表是tbl\u通知。比如说,我想生成一个JSON输出,如下所示:- [ { "trigger_event":"ONE", "ptc": { "id":"184" }, "message":"this is message" }, { "trigger_event":"TWO", "ptc": { "id":"184" }, "message":"sasasd", "rem

此表是
tbl\u通知
。比如说,我想生成一个JSON输出,如下所示:-

[
  {
    "trigger_event":"ONE",
    "ptc":
    {
      "id":"184"
    },
    "message":"this is message"
  },
  {
    "trigger_event":"TWO",
    "ptc":
    {
      "id":"184"
    },
    "message":"sasasd",
    "remind_interval":"60",
    "document":
    {
      "id":""
    }
  }
]
因此,这个JSON中只有两个主要对象(:trigger_event[ONE]&[TWO])。一个有3个散列,而两个有5个散列

对于db端,im使用PostgreSQL和列调用
message\u notification
,这是JSONB数据格式类型

上面的JSON输出位于
message\u notification
列下

控制器(只需拉出json部分)

模型(只需拉出json部分)

查看(只需拉出json部分)

原因是,我想制作和/或表单,即用户可以检查字段表单一或字段表单二,或检查字段表单一和字段表单二

  • 因此,如果选中一个,
    :trigger_event,:message&:ptc{:id}
    将保存
  • 如果选中两个,
    :触发器事件,:消息,:ptc{:id},:提醒间隔&:document{:id}
    将保存
  • 如果同时选中(一和二),将产生类似于上面JSON输出的结果

  • 如何做到这一点?

    我真的不明白你觉得这个场景有什么复杂之处

    鉴于这些复选框没有什么特别之处,请使用HTML:

    
    
    然后在控制器中,您只需检查已选中的复选框,并生成相应的JSON:

    def创建
    触发事件=[]
    如果参数[:trigger_events][:one]='1'
    触发事件
    
    def create
      @geofence.message_notification = {
        trigger_event: params[:ng_geofence][:trigger_event],
        ptc: params[:ng_geofence][:ptc],
        message: params[:ng_geofence][:message],
        remind_interval: params[:ng_geofence][:remind_interval],
        document: params[:ng_geofence][:document]
      }.to_json
    end
    
    def as_hash(format=:google)
      {
        trigger_event: trigger_event,
        ptc: { id: ptc },
        message: message,
        remind_interval: remind_interval,
        document: { id: document },
      }
    end
    
    TRIGGER_EVENTS = [
      ["ONE","ONE"],
      ["TWO","TWO"]
    ]
    
    <%= f.select :trigger_event, Ng::Geofence::TRIGGER_EVENTS, { prompt: "-- Choose" } %>
    <%= f.input :ptc, collection: @pretrips, wrapper: false, label: false, selected: (x['ptc']['id'] unless f.object.new_record?), :include_blank => true %>
    <%= f.input :message, as: :string, label: false, wrapper: false %>
    etc
    
    <%= f.input :trigger_event['ONE'], as: :boolean, label: 'ONE' %>
    <br/>
    <%= f.input :trigger_event['TWO'], as: :boolean, label: 'TWO' %>
    
    <input type="checkbox" name="trigger_events[one]" value="1">
    <input type="checkbox" name="trigger_events[two]" value="1">