2017-10-19 5 views
0

Comment créer des cases à cocher dans form_for de hashed enum:Rails formulaire avec des cases à cocher de ENUM (hachage)

class UserProfile < ApplicationRecord 
    enum locations: { Kursenai: 0, Papiskes: 1, Versiai: 2 } 

J'essaie quelque chose comme:

<div class="field"> 
    <% UserProfile.locations.map { |k, v| }.each do |key, val| %> 
    <%= f.label key %><br /> 
    <%= f.check_box :locations, {:multiple => true}, val, nil %> 
    <% end %> 
</div> 

Mais cela échoue à bien des égards, par ex . Je pensais que je pouvais saisir key de la boucle et le définir comme une valeur de l'étiquette .. Mon Postgres a:

t.integer "locations", array: true 

I permettent également locations en params fortes:

..permit(:locations) 

Faut-il être fait quelque chose d'autre pour enregistrer tableau en DB?

S'il vous plaît également le conseil sur ceci - maintenant que enum est placé dans un modèle mais je l'emploierai également dans d'autres classes, ainsi devrais-je le créer comme concern ou juste comme classe simple?

Merci à l'avance

EDIT:

que je fais dans la console:

p = { Kursenai: 0, Papiskes: 1, Versiai: 2 } 
p.map{|k,v| [k, v]}.each do |key, val| puts key, val 

Et je reçois:

Kursenai 
0 
Papiskes 
1 
Versiai 
2 
=> [[: Kursenai, 0], [: Papiskes, 1], [: Versiai, 2]] 

Et dans le modèle, la première case à cocher apparaît sans une case à cocher (juste l'étiquette), tandis que le dernier n'a pas d'étiquette. Hm ...

+0

Oups, erreur stupide - 'map' ne retourne rien: D Mieux vaut retourner quelque chose :) -' UserProfile.locations.map {| k, v | [k, v]} '. Mais cela ne fonctionne toujours pas comme prévu - l'étiquette de la dernière case à cocher affiche une énumération complète au lieu de la clé d'un élément. S'il vous plaît n'hésitez pas à écrire une meilleure mise en œuvre de ce –

+0

Oh ...... Cant belevae cela .. J'avais '
' placé là ... Dommage pour ma famille ... –

Répondre

1

Vous avez un appel inutile à map .. paires déjà donné les tables de hachage [clé, valeur] tandis que les éléments sur l'énumération à l'intérieur, de sorte que vous devriez juste être en mesure de le faire:

<% UserProfile.locations.each do |key, val| %> 
    ... 
<% end %> 

En outre, il semble que vous essayez d'utiliser une colonne enum pour stocker plusieurs valeurs simultanément, cependant, je crois que l'aide de colonne enum est conçue pour être une enveloppe autour d'une valeur singulière, donc les champs de formulaire devraient probablement être des boutons radio ou un menu select, pas des cases à cocher.

+0

Bon point sur la carte. C'était la conséquence de la résolution des erreurs précédentes. Et j'utilise enum parce que j'utilise les mêmes éléments pour sélectionner le champ :) Merci! –