Я создаю приложение rails, и есть часть, которая вызывает у меня некоторые проблемы при разработке моего кода. Я чувствую, что я делаю это слишком грязно, и я хотел бы знать, есть ли шаблон дизайна или вообще лучший способ сделать это. Ситуация такая:
У меня есть модель города, и город может хранить дерево, камень и золото. Эти ресурсы меняются со временем в зависимости от их временных отметок. У них есть свои собственные атрибуты, такие как количество, change_timestamp.
Теперь я подумал, что создание 3-х отдельных моделей, таких как wood_production, stone_production и gold_production, казалось хорошей идеей, казалось вполне адекватным. Я также создал делегаторы и виртуальные атрибуты, чтобы я мог выполнить что-то вроде:
city.wood or city.stone
Однако проблемы возникают, когда я хочу изменить сумму или метку времени для определенного типа ресурса. Скажите, что здание стоит
{:wood => 200, :stone => 100, :gold => 50}
должно быть создано. Итак, скажем, что здание создано, и теперь я должен сократить ресурсы города. Для этого мне нужно сделать что-то вроде:
self.wood_production.update_attribute(:change_timestamp, Time.now)
self.wood -= v
self.save
Проблема в том, что это зависит от ресурса. Мне бы очень хотелось иметь метод set_resource, который работает с процедурой, не заботясь о типе ресурса (без использования ifs и дополнительных спагетти).
Как бы вы это сделали?