2010-12-01 13 views
0

HI,L'utilisation d'un hachage en vue dans des rails

J'utilise un hachage CONSTANT dans mon modèle utilisateur comme

myuser = { : prenom => "Prénom", : lastname => « Nom », : désignation => « Ma désignation » }

maintenant dans mon point de vue, j'ai une boucle où j'ai tous ces noms de champs (nom, prénom, désignation)

J'essaie donc d'envoyer ce nom de champ comme une clé dans

<% @userfields.sort.each do |userfield| %> 
     <tr> 
      <td> 

     <% @userkey=userfield%> 
     <%= @userkey%> # gives the exact field names 
      <%= User::MYUSER[:@userkey]%> # this doesnt gives anything 
      <td></tr> 
    <%end%> 

Comment remédier à cette situation ?? donner quelques suggestions

Répondre

3

Lorsque vous utilisez une variable comme index à un hachage, vous ne devriez pas spécifier le côlon, la syntaxe correcte serait:

User::MYUSER[@userkey] 

ou

User::MYUSER[@userkey.to_sym] 

en fonction de la valeur dans @userkey.

Cependant, vous pourriez boucle aussi la constante directement comme myuser ceci:

<% User::MYUSER.keys.each do |key| %> 
    <tr> 
    <td>Key: <%= key %></td> 
    <td>Value: <%= User::MYUSER[key] %></td> 
    </tr> 
<% end %> 
+0

utilisateur :: myuser [@userkey] à nouveau ne fonctionne pas .. – useranon

+0

Vous n'avez pas spécifié le contenu de @userfields je ne peux pas dire à coup sûr quel est le problème. Mais si @userfields est [: prénom,: nom,: désignation] alors User :: MYUSER [@userkey] devrait fonctionner. Et si @userfields est ["prénom", "nom", "désignation"] alors User :: MYUSER [@ userkey.to_sym] devrait fonctionner parce que les valeurs de chaîne sont converties en symboles. Mais si @userfields est ["Prénom", "Nom", "Désignation"], vous devez également mettre en minuscule la chaîne comme ceci: User :: MYUSER [@ userkey.downcase.to_sym]. – DanneManne

+0

@DanneManna - Mes valeurs de @userfield sont ["f i r s t n a m e", "l a s t n a m e", "d e s s i n s t i o n"]. Comment supprimer les espaces entre eux et utiliser – useranon

2

Je suis d'accord avec la réponse de @ DanneManne. Mais plus précisément, vous pouvez parcourir les enregistrements en utilisant each_pair:

<% User::MYUSER.each_pair do |key, value| %> <tr> <td>Key: <%= key %></td> <td>Value: <%= value %></td> </tr> <% end %>