Ich habe ein Masseneditierformular. Ein Benutzer wählt mehrere vorhandene Datensätze aus. Und dann klickt auf eine Schaltfläche, die ein neues Datensatzformular anzeigt (alle Werte sind leer). Der Benutzer gibt einige Daten für jedes Attribut ein und klickt dann auf Senden, wodurch alle ausgewählten Datensätze mit den angegebenen Werten aktualisiert werden.Nur Attribute aktualisieren, die nicht leer sind
Der params-Hash an den Server gesendet sieht wie folgt aus:
{
'lead_ids' => [2,4]
'lead' => {
'name' => 'donato',
'email' => "",
'phone' => ""
}
}
So in diesem Beispiel nur das Namensattribut für Blei mit einer ID von 2 aktualisiert werden soll und 4.
Dies ist was ich kam mit:
lead = Lead.new lead_params
leads = Lead.where(id: params[:lead_ids])
changed_attrs = lead_params.select {|param| !param.values.first.blank?}
leads.each do |lead|
lead.update_attributes changed_attrs
end
gibt es einen Railsy Weg, dies zu tun?
Es könnte ein wenig sauberer sein, dies in der 'params' Verarbeitung auszubrechen, aber das ist die richtige Idee. – tadman
'hash = params [: lead]', aber sonst ist dies der Weg zu gehen – GoGoCarl
@GoGoCarl: Guter Fang. – MTarantini