2009-09-15 8 views
2

Dans mon modèle, j'ai un attribut "duration" (secondes en entier) Mais les vues new/edit ont une entrée pour: heures, minutes, secondes.Comment convertir l'entrée de l'utilisateur en heures, minutes, secondes

Dois-je dans le modèle (attr_accessor: heures,: minutes,: secondes) puis comment puis-je convertir ces attributs virtuels dans mon attribut "duration", venant de Java j'aurais setter/getter sur "duration"!

Répondre

6

Vous pouvez définir un filtre before_save pour calculer sa valeur à partir des valeurs de vos accesors virtuels (en heures, minutes et secondes). Quelque chose comme:

class Model << AR:Base 

    attr_accessor :hours, :minutes, :seconds 
    before_save :update_duration 

    def update_duration 
    duration = = hours*3600 + minutes*60 + secods 
    end 

end 

C'est un peu rude, mais devrait vous donner une idée de comment cela pourrait fonctionner. Chaque fois que vous appelez la méthode "save" sur le modèle (soit sur une action de création ou de mise à jour), le filtre sera appelé avant d'accéder au BD, mettre à jour sa valeur puis procéder à son enregistrement correct.

+0

Params à l'intérieur d'un modèle, êtes-vous sûr de cela ...? – nitecoder

+0

Params dans le modèle n'a pas de sens! – railsuser

+0

Vous avez raison, désolé, ceux qui étaient destinés à un contrôleur seulement, pas le modèle. Je l'ai ajusté en conséquence. – Yaraher

Questions connexes