Ruby - плохой вывод из массивов - PullRequest
2 голосов
/ 19 октября 2011

У меня есть форма с большим количеством этих текстовых входов:

<%= text_field_tag 'name[seq]['+dat.id.to_s+']', dat.seq%>

После отправки этой формы я хочу сохранить их в базе данных, я пытаюсь получить значения из входных данных в каждом цикле:

unless params[:name].nil?
  params[:name][:seq].each_with_index do |sq, i|
    puts sq
  end
end

Но вывод в терминале неправильный, например, если у меня есть вход со значениями

<% = text_field_tag ​​'name [seq] [25]', 3%>

Итак, я ожидаю, что на выходе будет 3 , но я доберусь до терминала:

25
3

Здесь что-то важное, чего я не вижу?

1 Ответ

1 голос
/ 19 октября 2011

Да, вы что-то упустили.В вашем each_with_index блоке sq будет массивом, и поэтому вы получаете этот вывод.

Итак, что здесь происходит?Ну, ваш params будет содержать это:

"name" => { "seq" => { "25" => "3" } }

И это означает, что params[:name][:seq] это:

{ "25" => "3" }

Затем вы применяете each_with_index к этому для итерации поHash.Если вы сделаете это так:

params[:name][:seq].each_with_index do |(k,v), i|
  puts "-#{k}-#{v}-"
end

, вы увидите, что происходит.

Если вы просто хотите 3, то вы можете перебрать params[:name][:seq], как указано выше, и простопосмотрите на v внутри блока или, если вы знаете, что такое '25', вы можете просто пойти прямо туда:

three = params[:name][:seq]['25']
...