Come posso aggiungere un attributo al modello User?

Sto cercando di modificare un plugin.
Il codice seguente ha fallito e ha generato un errore come:

# total_points è una tabella di sommatoria con la colonna "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

Sono molto nuovo a Rails. Potresti dirmi cosa c’è di sbagliato?
Grazie mille!

Mi dispiace, questo potrebbe non essere di grande aiuto, ma è veloce. :slight_smile:

Qualcosa che ti aspetti sia un array è nil. Forse args è nil e deve essere un []?

Puoi anche dare un’occhiata a GitHub - discourse/all-the-plugins per cercare esempi di ciò che stai cercando di fare (non riesco a capire bene cosa stai cercando di fare).

Dai un’occhiata a discourse-calendar. Aggiunge una classe Event, che sembra abbastanza analoga a ciò che stai cercando di fare.

Ci sono un sacco di plugin che hanno un blocco reloadable_patch simile, però.

1 Mi Piace

Grazie per la risposta!
Ho appena creato una nuova tabella e voglio aggiungere una delle colonne della tabella alla tabella utente.

1 Mi Piace

Ho cambiato

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

in

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

ancora non funziona. :cold_sweat:
Qualcuno può aiutarmi?