Problem mit Klassenmethode

Hallo,

ich verstehe gerade nicht, warum meine Klassenmethode
generate_random_seqence
nicht funktioniert.

In der Konsole ist alles ok:

ContactData.generate_random_sequence
=> [7, 5, 2, 6]

Aber sobald ich die Klassenmethode aus der Instanz aufrufe, erhalte ich
eine
Fehlermeldung:

undefined method `generate_random_sequence’ for #ContactData:0x237e3b0

app/models/contact_data.rb:35:in valid_sequence_confirmation?' app/models/contact_data.rb:22:invalidate’
lib/non_record_model.rb:8:in `valid?’

Hier der relevante Ausschnitt des Quellcodes:

class ContactData < NonRecordModel::Base

attr_accessor :sequence

def valid_sequence_confirmation?
return true if sequence_confirmed?
if self.sequence_confirmation.to_s == self.sequence.to_s
self.sequence_confirmed = “true”
return true
end
self.sequence = self.generate_random_sequence
false
end

def sequence_confirmed?
(self.sequence_confirmed && self.sequence_confirmed.strip.length >
0)
end

def self.generate_random_sequence
[1,2,3,4,5,6,7,8,9].sort_by{rand}[1…4]
end

end

Wahrscheinlich etwas ziemlich Triviales, das ich übersehen habe. Kann
mir jemand
auf die Sprünge helfen?

Viele Grüße

Michael K.

Hallo Michael,

ein Klassenmethode in Ruby funktioniert etwas anders als statische
Methoden in Java. Um es kurz zu machen: Die Methode ist auf der Klasse
definiert und kann auch nur auf der Klasse oder auf Subklassen gerufen
werden. Um dein Stückchen Code zum Laufen zu bekommen musst du also in
den Instanz-Methoden den Aufruf

  • self.generate_random_sequence

in

  • self.class.generate_random_sequence

oder

  • ContactData.generate_random_sequence

ändern. Dann sollte alles wie erwartet funktionieren.

Viele
Grüße
Gregor

mist, Gregor war schneller :-\ grummel

Hi,
die Zeile sollte wohl besser heißen:
@sequence = ContactData.generate_random_sequence

-Alex

Gregor, Alex,

thanks, danke fürs Brett wegnehmen.

Viele
Grüße
Michael K.

Gregor Schmidt schrieb: