2017-01-17 1 views
1

In meiner Schienen-Modelle, habe ich manchmal ein einziges Attribut Setter, überschreiben, so dass es wie so mehr als ein Attribut setzt:Gibt es einen Industriestandard für das gleichzeitige Festlegen mehrerer Objektattribute?

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 

Während anfangs dachte ich, diese Art von klug war, im Laufe der Zeit (Jahre) I‘ Ich habe das Gefühl, dass der Mangel an Transparenz, der meinen älteren Code gibt, mich unbehaglich macht.

Also habe ich herumgespielt mit nicht "Überschreiben/Überladen", sondern speziell diese Methoden aufrufen #set_attrs_by_subscription_plan oder etwas ähnliches. Dies fühlt sich im Vergleich voluminöser und etwas umständlicher an, aber es gibt weniger Rauch und Spiegel.

Es fällt mir auf, dass dies etwas sein muss, mit dem sich andere befasst haben, und vielleicht sogar etwas, das einen Namen hat. Es könnte sogar einen Industriestandard geben, um dies zu erreichen, oder ein Designmuster.

Hat jemand da draußen Vorschläge/Empfehlungen für mich?

+1

Wenn Sie diese Objekte im Abonnementplan haben, warum verwenden Sie dann keine Beziehung und delegieren Sie bei Bedarf nicht zum Abonnementplan? –

+0

Wie ändere ich einfach die Namen der Methoden, zum Beispiel create_stripe_subscript (ss) – Yule

+0

@ j-dexx In diesem Fall, weil ich die subscribe_plan Details zum Zeitpunkt der Subskriptionserstellung aufzeichnen muss, da sie zukünftig möglicherweise als ändern Ich finde den richtigen Preis. Aber jedes bereits begonnene Abonnement muss wissen, wie man sich selbst erneuert und was die Spezifikationen für sich allein sind. – pixelearth

Antwort

1

Sie können assign_attributes(duration: sp.duration, num_lessons: sp.num_lessons) verwenden.

Verwandte Themen