Ruby迭代器块焦点进入参数?

Ruby迭代器块焦点进入参数?,ruby,foreach,parameters,params,Ruby,Foreach,Parameters,Params,我有一个大型迭代器,需要在参数中插入一个循环计数整数,并将其插入到Sinatra帖子捕获的参数中 我不知道如何在循环中增加参数(:s_fieldname_I)。我想引用上一次I中的循环计数。我简化了循环,以便在此演示挑战: 1.upto(@count) do |i| @f += " <label for=\"" + params[:s_fieldname_i] + "\">" + params[:s_fieldname_i.capitalize!] + "&l

我有一个大型迭代器,需要在参数中插入一个循环计数整数,并将其插入到Sinatra帖子捕获的参数中

我不知道如何在循环中增加参数(
:s_fieldname_I
)。我想引用上一次
I
中的循环计数。我简化了循环,以便在此演示挑战:

    1.upto(@count) do |i|
        @f += " <label for=\"" + params[:s_fieldname_i] + "\">" + params[:s_fieldname_i.capitalize!] + "</label>\n"
    end
1.最多(@count)do|i|
@f+=“”+params[:s_fieldname_i.大写!]+“\n”
结束

我尝试了一些字符串插值(
#{I}
),但这只会让它更加混乱。我相信有办法做到这一点。

在这种情况下,你应该尽量避免字符串连接,因为如果某个参数值在某个点变为
nil
,它会爆炸你的应用程序

尝试使用字符串插值,我认为您正在寻找类似以下内容:

1.upto(@count) do |i|
  @f += "<label for='#{params[:s_fieldname_i]}'> #{params[:s_fieldname_i.capitalize!]}</label>\n"
end
1.最多(@count)do|i|
@f+=“#{params[:s_fieldname_i.capitalize!]}\n”
结束

有时,将其分解成一个单独的变量可以使它更简单

1.upto(@count) do |i|
    fieldname = "s_fieldname_#{i}".to_sym
    @f += " <label for=\"" + params[fieldname] + "\">" + params[fieldname.capitalize!] + "</label>\n"
end
1.最多(@count)do|i|
fieldname=“s_fieldname_35;{i}”。to_sym
@f+=“”+参数[fieldname.capitalize!]+“\n”
结束
@key=“s\u fieldname”+i.to\u
@f+=“”

省略符号并强制迭代器i为字符串,这就形成了一个可行的键

不要在Ruby中为使用
。相反,使用
每个
最多
迭代块。请参见编辑。内部仍然存在相同的问题。没有必要或建议添加“编辑:”或“更新”类型标记。根据需要调整代码以反映其当前状态,并确保问题是最新的且与代码匹配。我们可以看看你是否改变了什么,如果有必要,你会改变什么。因为我们的代码与您的“编辑”不匹配,所以请重新编辑您的问题以使其有意义。事实上,如果我只是编辑代码,那么注释就没有意义了。看,在科学学位上,你被鼓励编辑东西,而不仅仅是改变它们。这样谈话的进展才有意义。你能弄清楚什么被改变的唯一方法是,第一次提交的东西是否也存在。具体来说,这不是火箭科学。当像这样的补救措施受到攻击时,它对任何人都没有帮助,特别是当在谈话后支持荒谬的结果时。同样,你的评论与问题无关。除了循环是如何启动的,问题仍然存在。建议评论与问题相关,而不是你想谈论的内容。太接近了@f+=params[@fieldname]在@f的输出上抛出一个错误,但是@f+=@fieldname渲染得很好。强制.to#sym也会引发一个错误。
@f+=params[fieldname]
的错误是什么?首先,我必须将该定义更改为@fieldname=“s#u fieldname+{I}”。to#sym。然后,当它在构建中需要ATfieldname时,这就变得令人困惑了。尝试ATfieldname(在解决字符串强制要求后)不会显示任何内容,正如:fieldname。所以这两种选择根本无法解决问题。(很抱歉,这里的招牌把帖子搞砸了)你为什么要把它改成
@fieldname
?我是Sinatra。所以它必须是一个实例。我刚回到这里,让我再想想。稍后将发布。谢谢。@f+=”解决了。所以这表明它在整个插值过程中是盲目的。如果能够实现这一目标,那么这一方法似乎很好。
@key = "s_fieldname_" + i.to_s
@f += " <label for=\"" + @h[("s_fieldname_" + i.to_s)].to_s + "\">"