В моей модели рельсы, я иногда перезаписать один атрибут сеттер, так что он устанавливает более чем один атрибут как так:Есть ли промышленный стандарт для установки нескольких атрибутов объектов одновременно?
class UserSubscription < ActiveRecord::Base
# multi setter!
def subscription_plan=(sp)
self.duration = sp.duration
self.num_lessons = sp.num_lessons
self.checkout_active_duration_days = sp.checkout_active_duration_days
self.num_collaborators_can_have = sp.num_collaborators
super sp
end
# multi setter!
def stripe_subscription=(ss)
self.stripe_subscription_id = ss.id
self.current_period_start = UserSubscription.stripe_stamp_to_datetime(ss.current_period_start)
self.current_period_end = UserSubscription.stripe_stamp_to_datetime(ss.current_period_end)
end
end
Хотя изначально я думал, что это вроде умный, в течение долгого времени (лет) я я чувствовал, что отсутствие прозрачности, которое дает мой старый код, заставляет меня чувствовать себя неловко.
Так что я поиграл с «переписыванием/перегрузкой», но специально назвал эти методы #set_attrs_by_subscription_plan или что-то подобное. Это кажется более громоздким и несколько громоздким по сравнению, но меньше дыма и зеркал.
Мне кажется, что это должно быть то, с чем другие сталкивались, и, возможно, даже то, что имеет имя. Там может быть даже отраслевой стандарт для этого, или шаблон дизайна.
У кого-нибудь есть предложения/рекомендации для меня?
Если у вас есть эти объекты в плане подписки, почему бы вам не использовать отношение и не делегировать его в план подписки, когда это необходимо? –
Как просто изменить имена методов, например create_stripe_subscript (ss) – Yule
@ j-dexx В этом случае, поскольку мне нужно сохранить запись деталей subscription_plan во время создания подписки, так как они потенциально могут измениться в будущем как Я нахожу правильную цену. Но любая подписка, уже начатая, должна знать, как обновить себя и какие спецификации были для себя в одиночку. – pixelearth