13 Stimmen

Was ist der einfachste Weg, um alle Attribute (außer id, created_at, updated_at) eines ActiveRecord-Objekts auf nil zu setzen?

Was ist der einfachste Weg, um alle Attribute (außer id, created_at, updated_at) eines ActiveRecord-Objekts auf nil zu setzen?

1 Stimmen

Ehrlich gesagt scheint dies ein sehr spezieller Fall zu sein, könntest du ein wenig erklären, weshalb dies erforderlich ist - vielleicht gibt es eine bessere Lösung. In der Zwischenzeit schau dir meine Antwort an.

0 Stimmen

Ja, ich weiß, es ist ein bisschen seltsam, aber vertrau mir, es war notwendig. Danke für deine Antwort, hat super funktioniert.

7voto

lwe Punkte 2602

Es gibt ein Array namens attribute_names im Modell, das alle Attribute enthält, also verwenden Sie reject, um die Attribute zu filtern:

class Model < AR::Base
  def nilify_attributes!(except = nil)
    except ||= %w{id created_at updated_at}
    attribute_names.reject { |attr| except.include?(attr) }.each { |attr| self[attr] = nil }
  end
end

Siehe http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-attribute_names

6voto

Brian Deterling Punkte 13329

Wenn es sich um eine einmalige Sache handelt, könnten Sie dies im Controller tun:

@record.update_attributes(Hash[*@record.attributes.except('created_at','updated_at','id').map { |a| [a.first, nil] }.flatten])

1voto

Deepak A Punkte 322

Ich weiß, dass dies bereits beantwortet wurde. Ich bin auch auf die gleiche Situation gestoßen, die eine andere Lösung aufgebracht hat.

record.dup.attributes.keep_if{|k,v| !v.nil?}

Hier ist das Record das aktive Record-Objekt.

0voto

himanshu rai Punkte 26
Model.column_names.map { |col| [col, nil] }.to_h.except(*[attrs_to_except])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X