2010-08-19 4 views
5

J'ai un formulaire pour le formulaire, et dans celui-ci, j'utilise une case à cocher helper. Le modèle a un champ qui est une valeur booléenne, mais j'aimerais pouvoir l'afficher sur mon formulaire en termes d'inverse, car je pense que c'est plus facile à comprendre pour les utilisateurs.Ruby on Rails: Utilisez form_for sur un modèle et retournez la valeur du formulaire

Y a-t-il un moyen pour moi d'avoir un formulaire Rails auxiliaire agir comme si le champ booléen du modèle est retourné?

Exemple:

<% form_for :user do |form| %> 
    <%= form.check_box :privacy_disabled %> 
<% end %> 

Dans cet exemple, le modèle de l'utilisateur a un champ booléen privacy_disabled. Je voudrais l'afficher dans le formulaire comme cocher ici pour activer confidentialité.

La fonction d'aide de case à cocher a la possibilité de définir ses valeurs cochées et non cochées, mais inverser celles-ci ne semble pas remplir correctement la case avec la valeur pré-enregistrée.

Répondre

9

Voilà comment je fini par résoudre ce problème, j'étais en fait proche de ma première tentative:

<%= form.check_box :privacy_disabled, 
        {:checked => [email protected]_disabled}, 
        0, 
        1 %> 

Ainsi, les valeurs renvoyées par la case à cocher sont retournées, et si elle commence vérification est basculée manuellement bien.

6

pas la solution la plus élégante, mais vous pouvez faire quelque chose comme ce qui suit:

  1. Ajouter ces méthodes à votre modèle utilisateur:

    def privacy_enabled=(val) 
        self.privacy_disabled = val == "0" 
    end 
    def privacy_enabled 
        !privacy_disabled 
    end 
    
  2. Modifier le formulaire:

    <%= form.check_box :privacy_enabled %> 
    

Encore une fois, pas élégant, mais ça marche.

+0

Ceci est une bonne solution; il est facile à lire et à comprendre de tous les côtés, et il peut facilement être déplacé dans un code spécifique à la vue lorsque le besoin s'en fait sentir. –

Questions connexes