2009-11-11 5 views
4

aussi simple que cela puisse paraître, je ne peux pas faire la valeur par défaut date_helper à une date, comme dans:Valeur par défaut pour date_helper dans formtastic

- semantic_form_for resource do |f| 
    - f.inputs do 
    = f.input :issued_on, :default => Date.today 
    = f.buttons 

ci-dessus rend juste les colonnes vides si la ressource n'a pas de date .

Apprécierait n'importe quel pointeur sur ce que je fais mal peut-être.

Répondre

2

Nous avons récemment implémenté une option: selected sur toutes les entrées: select,: radio et: check_boxes dans Formtastic, donc ce sera dans la prochaine version de patch (0.9.5) ou 1.0. Jusque là, le conseil de créer un after_initialize ou de définir le défaut dans le contrôleur est un bon conseil, mais je pense que parfois la meilleure personne pour décider de la valeur par défaut est le concepteur, qui peut ne pas être à l'aise les contrôleurs ou modèles, c'est pourquoi nous avons ajouté cela dans le cadre de la DSL Formtastic.

+0

L'option ': selected' est [obsolète] (https://github.com/justinfrench/formtastic/wiki/Deprecation-of-%3Aselected-option) maintenant, donc nous serons bientôt de retour à la case départ. – jgkite

7

Vous pouvez définir la valeur par défaut sur l'objet lui-même sur votre contrôleur

def edit 
    @resource = Resource.find(params[:id]) 
    @resource.issued_on ||= Date.today 
end 
+1

+1, me battre de quelques minutes. Je pense que cette façon de faire est la meilleure pratique. – mculp

+0

déplacer les valeurs par défaut au contrôleur, gracias. –

2

Vous devez définir after_initialize dans le modèle. Si une méthode after_initialize est définie dans votre modèle, elle est appelée en tant que rappel à new, create, find et toutes les autres méthodes qui génèrent des instances de votre modèle.

Idéalement, vous voudriez le définir comme ceci:

class resource < ActiveRecord::Base 

    def after_initialize 
    @issued_on ||= Date.today 
    end 
    ... 
end 

alors votre point de vue ressemblerait à ceci:

- semantic_form_for resource do |f| 
    - f.inputs do 
    = f.input :issued_on 
    = f.buttons 

Cela protège également contre les erreurs nil si vous trouvez un record n'a pas ces champs définis. Cependant, cela ne devrait pas arriver si vous ne créez pas directement un enregistrement sans ActiveRecord.

0

vous pouvez mettre suivante dans votre fichier modèle

def after_initialize 
    self.start ||= Date.today 
    self.token ||= SecureRandom.hex(4) 
    self.active ||= true 
end 

la classe supérieure délivré

@issued_on ||= Date.today 

n'a pas fonctionné pour moi

0

J'aime la façon suivante

after_initialize :set_issued_on 

def set_issued_on 
    @issued_on||=Date.today 
end 

Bit lo nger, mais agréable et clair

Questions connexes