2 Stimmen

Wie kann der Zuweisung von Attributen abgefangen werden?

Ich habe einen Fehler, bei dem in einem assoziierten Modell der Fremdschlüssel des übergeordneten Modells als NULL in der Tabelle des assoziierten Modells erscheint.

Um herauszufinden, warum dies passiert, möchte ich jedes Mal, wenn einem Attribut ein Wert zugewiesen wird (d.h. bei jedem Aufruf der attr= Methoden), in die Protokolldatei schreiben.

Wie kann ich das tun? Ermöglicht Rails dies bereits auf eine Weise, von der ich nichts weiß?

3voto

Pan Thomakos Punkte 33342

Sie können dies einfach erreichen, indem Sie die Methode attr= überschreiben. Zum Beispiel:

class User
  def username= username
    Rails.logger.info "Benutzername wird mit #{username} festgelegt"
    write_attribute :username, username
  end
end

Sie können dies auch erreichen, indem Sie Methoden verkettet. Zum Beispiel:

class User
  alias :username_old= :username=
  def username= username
    Rails.logger.info "Benutzername wird mit #{username} festgelegt"
    self.username_old = username
  end
end

1voto

Ashish Punkte 5648

Ich denke, Sie können Rückrufmethoden (before_save) verwenden, um den Status Ihres Objekts zu überprüfen. Und folgendes könnte Ihnen helfen...

article = Article.find(:first)
article.changed?  #=> false

# Verfolgen von Änderungen an einzelnen Attributen mit
# attr\_name\_changed? Accessor
article.title  #=> "Titel"
article.title = "Neuer Titel"
article.title\_changed? #=> true

# Zugriff auf den vorherigen Wert mit attr\_name\_was Accessor
article.title\_was  #=> "Titel"

# Anzeigen sowohl des vorherigen als auch des aktuellen Werts mit attr\_name\_change Accessor
article.title\_change  #=> \["Titel", "Neuer Titel"\]

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