0

J'ai un formulaire que j'aimerais simplifier. J'enregistre une date de début et une date de fin, mais je voudrais montrer à l'utilisateur seulement une date de début, puis une liste déroulante avec le nombre de jours.Attribut virtuel avec dates

Mais j'ai des problèmes avec mon modèle et je le stocke correctement.

La première partie fonctionne.

def date=(thedate) 
    #puts the startdate in the correct format... 
    self.startdate = Date.strptime(thedate, '%m/%d/%Y') 
    end 

Le problème que je dois a à voir avec le fait que la date de fin est basée sur le startdate + les no_days, lui-même un attribut virtuel. J'ai essayé de faire la deuxième partie en tant que callback after_validation mais cela ne semble pas fonctionner.

def set_dates 
    if self.startdate 
     self.enddate = self.startdate + days 
    end 
    end 

Répondre

1

Tout d'abord, pourquoi avez-vous besoin de convertir un attribut date dans votre startdate? Pourquoi n'utilisez-vous pas quelque chose comme f.date_select :startdate dans votre forme?

Ensuite, dans votre modèle, vous avez besoin de quelque chose comme attr_accessor :number_of_days avec lequel vous pouvez obtenir le nombre de jours comme un entier dans votre formulaire avec f.select :number_of_days, (1..10).to_a (définissez le tableau comme vous le souhaitez).

Vous pouvez définir votre rappel de la façon suivante:

after_validation :set_enddate 

def set_enddate 
    if self.startdate 
    self.enddate = self.startdate + self.number_of_days.days 
    end 
end 
+0

belle merci. J'utilise le premier attribut virtuel de date parce que je n'aime pas l'aide de date_select et j'utilise un champ de texte avec jq-ui datepicker. – holden