2009-03-08 7 views
1

In Bezug auf thisRails ‚params‘ Variable

Ich habe eine Frage in ein Webformular wie folgt erstellt:

<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> 

Also, wenn Szenarien und private_messages wird geprüft und ich auszudrucken params[:features] Ich werde erhalten : scenissprivate_messages

Ich fragte mich, wie ich in der Lage sein würde, Szenarien und private_Meldungen getrennt von Params zu erhalten. Ist das Mapping params[:features] = "scenariosprivate_messages" oder ist es wirklich params[features] = ["scenarios", "private_messages"]? Wenn es das Letzte ist, wie kann ich sie durchlaufen?

Ich schreibe aus meiner Sicht:

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

und ich noch bekommen nur scenariosprivate_messages gedruckt.

Antwort

12

Versuchen Sie stattdessen:

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

Das Problem mit Ihrem ursprünglichen Lösung ist, dass das Ergebnis des Blocks sind auszudrucken, die das Array selbst, anstatt jedes Element des Arrays ausdrucken.

0

Nach this blog post sollten Sie in der Lage sein, sie als params[:features]['scenarios'] einzeln zuzugreifen usw. Looping sollte nur mit allen anderen Anordnungen wie - zum Beispiel der

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

+0

Hmmm es nicht zu funktionieren scheint. – alamodey

+0

Tut mir leid, habe nicht bemerkt, dass du es in der * Ansicht * überschleifen willst. Genau wie Jim sagt, solltest du aus deiner Sicht höchstwahrscheinlich keine Params benutzen. – schweerelos

9

Sie sollen nicht params in Ihren Ansichten verwenden . Am besten können Sie params[:features] einer Instanzvariable in Ihrem Controller zuweisen und dann in Ihrer Ansicht darüber iterieren.

Aber um Ihre Frage zu beantworten, setzen Sie das Gleichheitszeichen für die Ausgabe an der falschen Stelle. Sie möchten jedes Element des Arrays einzeln ausgeben, anstatt das Ergebnis der Schleife auszugeben.

+1

Warum ist das? «Sie sollten keine Params in Ihren Ansichten verwenden» –

2

Sie müssen humanize verwenden:

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

Danke. Ordentliche Funktion. – alamodey

Verwandte Themen