Comment puis-je ajouter un attribut au modèle User ?

J’essaie de modifier un plugin.
Le code suivant a échoué et a généré une erreur comme :

#  total_points est une table de somme avec la colonne "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

Je suis très nouveau dans Rails. Pourriez-vous me dire ce qui ne va pas ?
Merci beaucoup !

Désolé, cela n’est peut-être pas d’une grande aide, mais c’est rapide. :slight_smile:

Quelque chose qui devrait être un tableau est nil. Peut-être que args est nil et doit être un [] ?

Vous pouvez également consulter GitHub - discourse/all-the-plugins pour essayer de trouver des exemples de ce que vous essayez de faire (je ne peux pas vraiment dire ce que vous essayez de faire).

Découvrez discourse-calendar. Il ajoute une classe Event, qui semble assez analogue à ce que vous essayez de faire.

Il y a un tas de plugins qui ont un bloc reloadable_patch similaire, cependant.

1 « J'aime »

Merci pour votre réponse !
Je viens de créer une nouvelle table et je souhaite ajouter l’une des colonnes de la table à la table utilisateur.

1 « J'aime »

J’ai changé

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

en

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

ça ne fonctionne toujours pas. :cold_sweat:
Quelqu’un peut m’aider ?