Ruby - 数组的错误输出

发布于 2024-12-10 09:43:49 字数 502 浏览 0 评论 0原文

我有一个包含很多这些文本输入的表单:

<%= 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 '名称[seq][25]', 3%>

所以我预计输出是 3,但我会终端这个:

25
3

这里有什么重要的东西,我没有看到吗?

I have a form with a lots of these text inputs:

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

After send this form I want to save them to database, I try to get the values from inputs in each loop:

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

But the output in terminal is wrong, for example if I have an input with the values

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

So I am going to expect the output is 3, but I will get to terminal this:

25
3

Is here something important, what I don't see?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十级心震 2024-12-17 09:43:49

是的,你错过了一些东西。在您的 each_with_index 块中,sq 将是一个数组,这就是您获得该输出的原因。

那么,这是怎么回事?好吧,您的 params 将包含以下内容:

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

这意味着 params[:name][:seq] 是这样的:

{ "25" => "3" }

然后您将 each_with_index 应用于迭代哈希。如果你这样做:

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

Yes, you are missing something. Within your each_with_index block, sq will be an array and that's why you get that output.

So, what's going on here? Well, your params will contain this:

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

And that means that params[:name][:seq] is this:

{ "25" => "3" }

Then you apply each_with_index to that to iterate through the Hash. If you do it like this:

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

you'll see what's going on.

If you just want the 3 then you can iterate over params[:name][:seq] as above and just look at v inside the block or, if you know what the '25' is some other way, you could just go straight there:

three = params[:name][:seq]['25']
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文