2009-04-07 14 views
0

Ich habe ein Problem in meinem Modell. Ich möchte, dass Methode eine andere Eigenschaft des Modells verwendet, aber bevor ich sie verwende, möchte ich, dass eine andere Methode ausgeführt wird (um der Eigenschaft einen Wert zu geben). Hier ein Beispiel:Schienen: Modell-Ausführungsreihenfolge

def medthod_one=(val) 
    self.value = val 
end 

def method_two 
    self.second_value = self.value/2 #just for example 
end 

Also, in meinem Fall self.second_value ungültig ist, weil self.value noch nicht festgelegt ist. Wie ändere ich die Ausführungsreihenfolge dieser Methoden, nachdem ich das Formular für dieses Modell gesendet habe?

Antwort

1

Warum Sie nicht tun:

def method_one=(val) 
    self.value = val 
    self.second_value = val/2 
end 

Auf der anderen Seite, wenn second_value hängt immer von self.value, können Sie es als Nur-Lese-Eigenschaft implementieren können:

def second_value 
    self.value/2 
end 
+0

ein Grund insbesondere für den Downvote? –

3

Es Es ist schwierig, eine elegante Lösung zu finden, wenn Sie nur foo-bar-Beispiele anstelle von tatsächlichem Code bereitstellen, aber mein Ratespiel sagt mir, dass Sie wahrscheinlich so etwas wollen:

def som_setter=(val) 
    self.value = val 
end 

def method_two 
    return unless self.value 
    # perform calculations with 'self.value'. 
end 
+0

Ich wollte einen before_filter vorschlagen, aber da die Voraussetzung eine Zuweisung ist (die vermutlich von außerhalb der Klasse aufgerufen wird), ist Ihre Lösung vorzuziehen. –

Verwandte Themen