У меня есть метод в моей модели rails, который возвращает анонимный класс:
def today_earnings
Class.new do
def initialize(user)
@user = user
end
def all
@user.store_credits.where(created_at: Time.current.beginning_of_day..Time.current.end_of_day)
end
def unused
all.map { |el| el.amount - el.amount_used }.instance_eval do
def to_f
reduce(:+)
end
end
end
def used
all.map(&:amount_used).instance_eval do
def to_f
reduce(:+)
end
end
end
end.new(self)
end
Я хочу добиться возможности цепочки результатов таким образом user.today_earning.unused.to_f
, и у меня есть некоторые проблемы с экземпляром eval, потому что когда я вызываю to_f
для результата, это неопределенный метод, я предполагаю, что это связано с ruby копированием возвращенного значения, поэтому экземпляр изменяется, это правда? И если я прав, как я могу изменить код, чтобы он работал. Также мне интересно, может ли создание новой модели быть лучшим решением, чем аномный класс, поэтому мне нужен совет, если анонимный класс элегантен в этом случае, и если да, то как я могу добавить метод to_f к возвращаемым значениям