2016-11-28 7 views
0

Ich bekomme params wie folgt: Parameters: {"utf8"=>"✓", "events"=>{"363"=>{"name"=>"3"}}, "new_events"=>[{"name"=>"1"}, {"name"=>"2"}], "date"=>"2016-11-01"} Was ich tun möchte, ist Ereignisse aus new_events Array von Hashes erstellen, aber es lässt mich nicht, weil es needs für Massenzuweisung bereinigt werden muss. Dies ist, wie event_params wie folgt aussieht:Schienen Masse aus Array von Hash erstellen

def event_params 
    params.require(:events).permit(:id, :name, :start_time, :user_id) 
end 

Dieses Setup ist, weil ich aktualisieren möchten und/oder neue Datensätze erstellen, wenn ich einreichen drücken. Die aktuelle Art, wie ich dies tun, ist

params[:new_events].each_with_object({}) do |e| 
    Event.create(name: e[:name], user_id: current_user.id, start_time: params[:date]) 
end 

Aber Im nicht sicher, es ist der richtige Weg, es zu tun

Antwort

0

Sie sollten das Array von Parametern sanieren können:

params.require(:events).permit(new_events: [:name]) 
Event.create(params[:new_events] do |new_event| 
    new_event.user = current_user 
end 

Aber beachten dass Sie die Objekte sowieso überstreichen müssen, so dass es keinen großen Unterschied macht. Vielleicht möchten Sie einfach die Schleife tun mit Event.new und validieren sie als Gruppe:

events = Event.new(params[:new_events]) do |new_event| 
    new_event.user = current_user 
    ... 
end 

if events.any?(&:invalid?) 
    [error handling] 
else 
    events.save! 
+0

new_events ist kein Mitglied der Ereignisse. –

+0

new_events ist getrennt von Ereignissen Hash, es ist ein Array mit Hashes. Ich versuche, gleichzeitig zu erstellen und zu aktualisieren –

Verwandte Themen