Como posso adicionar um atributo ao modelo User?

Estou tentando modificar um plugin.
O código a seguir falhou e gerou um erro como:

# total_points é uma tabela de soma com a coluna "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

Sou muito novo no Rails. Você poderia me dizer o que está errado com isso?
Muito obrigado!

Desculpe, isso pode não ajudar muito, mas é rápido. :slight_smile:

Algo que você espera ser um array é nil. Talvez args seja nil e precise ser um []?

Você também pode dar uma olhada em GitHub - discourse/all-the-plugins para tentar encontrar exemplos do que você está tentando fazer (não consigo entender bem o que você está tentando fazer).

Confira discourse-calendar. Ele adiciona uma classe Event, que parece bastante análoga ao que você está tentando fazer.

No entanto, existem vários plugins que têm um bloco reloadable_patch semelhante.

1 curtida

Obrigado pela resposta!
Acabei de criar uma nova tabela e quero adicionar uma das colunas da tabela à tabela do usuário.

1 curtida

Eu mudo

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

para

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

ainda não funciona. :cold_sweat:
Alguém pode me ajudar?