2009-03-08 10 views
1

En ce qui concerne thisRails de les params 'variables

J'ai créé une question dans un formulaire en ligne comme celui-ci:

<div class="form_row"> 
     <label for="features[]">Features:</label> 
     <% [ 'scenarios', 'role_profiles', 'private_messages', 'polls' ].each do |feature| %> 
      <br><%= check_box_tag 'features[]', feature, 
        (params[:features] || {}).include?(feature) %> 
     <% end %> 
</div> 

Donc, si des scénarios et private_messages est vérifié et j'imprimer params[:features] j'obtenir : scenariosprivate_messages

Je me demandais comment je serais capable d'obtenir des scénarios et des messages privés séparément des paramètres. Est-ce que le mappage params[:features] = "scenariosprivate_messages" ou est-ce vraiment params[features] = ["scenarios", "private_messages"]? Si c'est le dernier comment puis-je les boucler?

J'écris à mon avis:

<%= params[:features].each {|param| 
    param.capitalize 
} %> 

et je reste juste obtenir scenariosprivate_messages imprimé.

Répondre

12

Essayez ceci:

<% params[:features].each do |param| %> 
    <%= param.capitalize %> 
<% end %> 

Le problème avec votre solution originale est que vous imprimez le résultat du bloc, qui est le tableau lui-même, plutôt que d'imprimer sur chaque élément du tableau.

0

Selon this blog post vous devriez être en mesure d'y accéder individuellement params[:features]['scenarios'] etc. Looping devrait fonctionner comme avec tous les autres tableaux - par exemple

params[:features].each { |param|
# do something with param
}

+0

Hmmm, il ne semble pas fonctionner. – alamodey

+0

Désolé, vous ne vous êtes pas rendu compte que vous voulez faire une boucle dans la * vue *. Tout comme Jim dit, vous ne devriez probablement pas utiliser les paramètres à votre avis. – schweerelos

9

Vous ne devriez pas utiliser params dans votre point de vue . Il est préférable d'affecter params[:features] à une variable d'instance de votre contrôleur, puis d'itérer sur cette variable dans votre vue. Mais pour répondre à votre question, vous mettez le signe égal à la sortie au mauvais endroit. Vous voulez sortir chaque élément du tableau individuellement au lieu de sortir le résultat de la boucle.

+1

Pourquoi est-ce? «Vous ne devriez pas utiliser les params dans vos vues» –

2

Vous devez utiliser humanize:

<% params[:features].each do |param| %> 
    <%= param.humanize %> 
<% end %> 
+0

Merci. Fonction soignée. – alamodey

Questions connexes