Ruby on Rails使用计数器,即“i”,变量名

时间:2012-09-18 18:38:09

标签: ruby ruby-on-rails-3

我在Rails中有一个表单,用户可以在其中输入多个记录。我将编写一些JavaScript,用户可以拥有几乎无限数量的记录。我的哈希看起来像这样:

inputA_1, inputB_1, inputC_1
inputA_2, inputB_2, inpuctC_2

在我的控制器中,我想做一个while循环来遍历行并将它们保存到数据库中,例如:

z = 0
i = 1
while z = 0
  @inputA = [:params][:inputA_i]
  @inputB = [:params][:inputB_i]
  @inputC = [:params][:inputC_i]
  if @inputA.nil?
     z=1
  else
  @record = [inputA: @inputA, inputB: @inputB, inputC: @inputC]
  @record.save
  i = i + 1
  end
end

问题在于我不知道如何使i的“:inputA_i”成为i的值。

任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:2)

i插入字符串并将字符串转换为symbol

@inputA = [:params]["inputA_#{i}".to_sym]
@inputB = [:params]["inputB_#{i}".to_sym]
@inputC = [:params]["inputC_#{i}".to_sym]

答案 1 :(得分:0)

我可以建议使用表单元素的数组序列化吗?:

<form>
  <input type="hidden" name="inputA[]" value="Hi">
  <input type="hidden" name="inputA[]" value="There">
  <input type="hidden" name="inputA[]" value="Sir">
</form>

当提交具有该HTML的表单时,值将变为params散列中的数组:

params[:inputA] #=> ["Hi", "There", "Sir"]

因此,您所有的JavaScript必须创建更多具有相同名称的输入,以[]结尾。在控制器中处理这些输入很多更简单。

params[:inputA].each do |value|
  @record = Record.new
  @record.inputA = value
  @record.save
end

答案 2 :(得分:0)

你可以制作一个像这样的字符串

"hello #{name}"

"%s means %s" %["how do you do?", "hello"]
希望它可以提供帮助!