Ich habe meine JSON-Posting mit verschachtelten Attributen arbeiten. Ich kann keine JSON-Datensätze mit den Kindermodellen posten und es wird gut gepostet.Rails verschachtelte Attribute nach spezifischen Feldnamen
Wenn ich jedoch einen Datensatz aktualisiere, suche ich nach einem Feld namens "tracking_id", weil das Upload-Programm die Rails-ID für das Modell nicht kennt. Es ist ein One-Way-Upload und bleibt agnostisch. Mit diesem Feld kann ich den korrekten Datensatz finden und ein Update veröffentlichen. Jedoch werden die Kinder dazu eingefügt statt aktualisiert.
Gibt es eine Möglichkeit, ich kann es sagen, um Kinder basierend auf einem Feld zu finden, die ich definiere, nicht nur "ID", da die Client-Anwendung nicht wissen, was das ist?
Beispiel:
#in Event Model
def self.batch_create(post_content, keymaster)
#keymaster is the user so we can add events to the right place
# begin exception handling
begin
# begin a transaction on the event model
Event.transaction do
# for each event record in the passed json
JSON.parse(post_content).each do |event_hash|
# create a new event
# if hash has tracking_id use that
if event_hash["tracking_id"].present?
event = keymaster.events.where(tracking_id: event_hash["tracking_id"]).first_or_initialize
else
event = keymaster.events.new
end
if event
# update the existing event record
event.update!(event_hash)
end # event.count
end # json.parse
end # transaction
rescue Exception => e
Rails.logger.info("Did not create batch events")
Rails.logger.info("caught exception #{e}! ohnoes!")
# Rails.logger.info(post_content)
end # exception handling
end # batch_create
Was ich möchte, ist die gleiche Funktion für die Kinder des Ereignisdatensatzes. Wenn sie bereits auf der Veranstaltung sind, werden sie aktualisiert und nicht nur neue Zeilen eingefügt.
Welche Parameterfelder würden Sie für den Controller definieren, um untergeordnete Modelle zu finden? Können Sie einen Beispielcode bereitstellen, vorzugsweise von Ihrem Paramter/Controller? –
hat weitere Informationen hinzugefügt –