2013-10-14 4 views
0

Lorsque je tente d'ajouter ma date par la CISR dans le terminal:erreur de chaîne de date

song.released_on = Date.new(2013,10,10) 

il dit qu'il est l'erreur suivante TypeError: no implicit conversion of Date into String

dans ce code:

def released_on=date 
    super Date.strptime(date, '%m/%d/%Y') 
end 

J'ai essayé pendant plusieurs heures savoir et ne peux pas trouver le problème. Est-ce que je me demandais si quelqu'un pouvait aider?

+1

Quelle est votre question? – sawa

Répondre

6

Le code:

def released_on=date 
    super Date.strptime(date, '%m/%d/%Y') 
end 

Utilise la fonction strptime (string-parse-time) de la classe Date. Il attend deux chaînes, une représentant la date réelle et une avec un formateur de chaîne.

Tout ce que vous devez faire pour faire avancer les choses de travail est de changer:

song.released_on = Date.new(2013,10,10) # Wrong, not a string! 
song.released_on = '10/10/2013' # Correct! 

Vous pouvez également changer la fonction d'accepter aussi une date:

def released_on=date 
    parsed_date = case date 
    when String then Date.strptime(date, '%m/%d/%Y') 
    when Date then date 
    else raise "Unable to parse date, must be Date or String of format '%m/%d/%Y'" 
    end 
    super parsed_date 
end 
1

Vous passez un Date par exemple à Date::strptime:

date = Date.new(2013,10,10) 
Date.strptime(date, '%m/%d/%Y') #=> TypeError: no implicit conversion of Date into String 

Au lieu de cela, vous devez passer un String (en utilisant le format correct):

date = "10/10/2013" 
Date.strptime(date, '%m/%d/%Y') #=> Thu, 10 Oct 2013 
+0

Ou rendre 'released_on =' assez intelligent pour passer une 'Date' à travers l'état actuel. –