2009-03-08 5 views
1

ссылкой на thisRails «» PARAMS переменной

Я создал вопрос в веб-форму, как это:

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

Так что, если сценарии и private_messages получает проверено и я распечатать params[:features] я получу : scenariosprivate_messages

Мне было интересно, как я смогу получить сценарии и private_messages отдельно от параметров. Является ли отображение params[:features] = "scenariosprivate_messages" или это действительно params[features] = ["scenarios", "private_messages"]? Если это последний, как я могу пройти через них?

Я пишу на мой взгляд:

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

и я до сих пор просто получить scenariosprivate_messages распечатаны.

ответ

12

Попробуйте вместо этого:

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

Проблема с оригинальным решением является то, что вы печатаете из результата блока, который сам массив, а не распечатывать каждый элемент массива.

0

По this blog post вы должны быть в состоянии получить доступ к ним по отдельности params[:features]['scenarios'] и т.д. Повторение петли должно работать как со всеми другими массивами - например

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

+0

Ммм это не похоже на работу. – alamodey

+0

Извините, вы не поняли, что хотите перебрать его в * view *. Как говорит Джим, вы, скорее всего, не будете использовать параметры в своем представлении. – schweerelos

9

Вы не должны использовать params в ваших взглядах , Лучше всего назначить params[:features] переменной экземпляра в вашем контроллере, а затем повторить это в вашем представлении.

Но чтобы ответить на ваш вопрос, вы помещаете знак равенства для вывода в неправильном месте. Вы хотите вывести каждый элемент массива индивидуально, а не выводить результат цикла.

+1

Почему это? «Вы не должны использовать params в своих взглядах» –

2

Вы должны использовать humanize:

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

Спасибо. Аккуратная функция. – alamodey