この表はtbl_notification
です。私はこのようなJSON出力に何かを作るにしたい、としましょう: -Rails 4 - JSONオブジェクトに複数の値を1つの単一形式で保存するAND/OR
[
{
"trigger_event":"ONE",
"ptc":
{
"id":"184"
},
"message":"this is message"
},
{
"trigger_event":"TWO",
"ptc":
{
"id":"184"
},
"message":"sasasd",
"remind_interval":"60",
"document":
{
"id":""
}
}
]
だから、このJSONで唯一の2つの主要なオブジェクトがある(:trigger_eventでは[ONE] & [TWO])。 ONEには3ハッシュがあり、TWOには5ハッシュがあります。
データベース側では、PostgreSQLを使用し、message_notification
というJSONBデータ形式の列呼び出しを使用しています。
上記のJSON出力はmessage_notification
の下にあります。
コントローラ
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
モデル(だけJSONの一部を引き出し)
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"]
]
ビュー(だけJSONの一部を引き出し)(単にJSONの一部を引き出し)
<%= 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
上記のコードは、:trigger_event
がselect_tag
の場合に機能しています。
だから今、私は:trigger_event
ためselect_tag
からcheck_box
に動作を変更したい、このようなもの(例):
<%= f.input :trigger_event['ONE'], as: :boolean, label: 'ONE' %>
<br/>
<%= f.input :trigger_event['TWO'], as: :boolean, label: 'TWO' %>
で、私が作るAND/ORである形成したい理由は、ユーザー1つのフィールドフォームにチェックするか、2つのフィールドフォームをチェックするか、両方のフィールドフォームに1つをチェックします。& TWO。
- ONEをチェックすると、
:trigger_event, :message & :ptc {:id}
が保存されます。 - チェックするとTWO、
:trigger_event, :message, :ptc {:id}, :remind_interval & :document {:id}
が保存されます。 - IFをチェックすると(ONE & TWO)、上記のJSON出力と同様の結果が得られます。
これを行うには?
説明をいただきありがとうございます。 – AmirolAhmad