Ho una classe che contiene questo metodo di una classe:Ruby: Posso utilizzare i metodi di istanza all'interno di un metodo di classe?
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
e ho anche, nella stessa classe, un metodo di istanza:
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
Ricevo un 'metodo non definito' errore per #format_date
. (L'ho provato senza lo self
davanti, all'inizio). Non puoi usare i metodi di istanza nei metodi di classe della stessa classe?
Perché 'format_date' è un metodo di istanza? Non sta usando nulla dall'istanza. – tdgs
Certo, non puoi. Per chiamare un metodo di istanza hai bisogno di un'istanza della tua classe. –
@tdgs Buon punto. L'ho reso un metodo di istanza perché pensavo che renderlo un metodo di classe implicherebbe che fosse per uso pubblico, quando il caso è solo per uso interno –