Wie kann ich dem User-Modell ein Attribut hinzufügen?

Ich versuche, ein Plugin zu modifizieren.
Der folgende Code ist fehlgeschlagen und hat einen Fehler wie diesen ausgelöst:

# total_points ist eine Summentabelle mit der Spalte "total_earned_points".
module MyModel::UserExtension
  def self.prepended(base)
    base.has_many :user_points, class_name: 'MyModel::UserPoint'
    base.has_one :total_point, class_name: 'MyModel::TotalPoint'
  end
end
 reloadable_patch do |plugin|
    User.class_eval { prepend MyModel::UserExtension }
  end

 add_to_class(:user, :total_earned_points) do
    # self.user_points.sum(:reward_points)
    self.total_point[:total_earned_points]
  end

Ich bin neu bei Rails. Könnten Sie mir bitte sagen, was daran falsch ist?
Vielen Dank!

Tut mir leid, das ist vielleicht keine große Hilfe, aber es ist schnell. :slight_smile:

Etwas, von dem Sie erwarten, dass es ein Array ist, ist nil. Vielleicht ist args nil und muss ein [] sein?

Sie können sich auch GitHub - discourse/all-the-plugins ansehen, um Beispiele dafür zu finden, was Sie zu tun versuchen (ich kann nicht ganz erkennen, was Sie zu tun versuchen).

Schauen Sie sich discourse-calendar an. Es fügt eine Event-Klasse hinzu, die dem, was Sie zu tun versuchen, ziemlich analog zu sein scheint.

Es gibt jedoch eine Reihe von Plugins, die einen ähnlichen reloadable_patch-Block haben.

1 „Gefällt mir“

Danke für die Antwort!
Ich habe gerade eine neue Tabelle erstellt und möchte eine der Spalten der Tabelle zur Benutzertabelle hinzufügen.

1 „Gefällt mir“

Ich ändere

add_to_class(:user, :total_earned_points) do
    # self.user_points.sum(:reward_points)
    self.total_point[:total_earned_points]
end

zu

add_to_class(:user, :total_earned_points) do
    # self.user_points.sum(:reward_points)
    self.total_point.read_attribute(:total_earned_points)
end

funktioniert immer noch nicht. :cold_sweat:
Kann mir jemand helfen?