ich eine Klasse, die diese Klasse Methode enthält:Ruby: Kann ich Instanzmethoden innerhalb einer Klassenmethode verwenden?
def self.get_event_record(row, participant)
event = Event.where(
:participant_id => participant.id,
:event_type_code => row[:event_type],
:event_start_date => self.format_date(row[:event_start_date])
).first
event = Event.new(
:participant_id => participant.id,
:event_type_code => row[:event_type],
:event_start_date => self.format_date(row[:event_start_date])
) if event.blank?
event
end
Und ich habe auch in der gleichen Klasse, eine Instanzmethode:
def format_date(date)
parsed_date = date.split('/')
# if month or day are single digit, make them double digit with a leading zero
if parsed_date[0].split("").size == 1
parsed_date[0].insert(0, '0')
end
if parsed_date[1].split("").size == 1
parsed_date[1].insert(0, '0')
end
parsed_date[2].insert(0, '20')
formatted_date = parsed_date.rotate(-1).join("-")
formatted_date
end
Ich erhalte eine ‚nicht definierte Methode‘ Fehler für #format_date
. (Ich habe es ohne die self
vorne zuerst versucht). Können Sie keine Instanzmethoden in Klassenmethoden derselben Klasse verwenden?
Warum ist 'format_date' eine Instanz-Methode? Es verwendet nichts von der Instanz. – tdgs
Natürlich können Sie nicht. Um eine Instanzmethode aufzurufen, benötigen Sie eine Instanz Ihrer Klasse. –
@tdgs Guter Punkt. Ich habe es zu einer Instanzmethode gemacht, weil ich dachte, dass es eine Klassenmethode wäre, würde bedeuten, dass es öffentlich genutzt wurde, wenn der Fall nur für den internen Gebrauch ist. –