1

在我的 seed.rb 中,我使用来自一个 title-1.txt 文件的文本数据填充 4 列。

title  = File.read(File.join(Rails.root, '/features/support/titles/title-1.txt'))  

1.upto(4) do |i|
  PressRelease.create(
    :title => title
  )
end

我想用来自不同 txt 文件(title-1.txt、title-2.txt、...)的不同内容填充每一列

我知道我可以做到这一点:

1.upto(4) do |i|
  PressRelease.create(
    :title => File.read(File.join(Rails.root, '/features/support/titles/title-' + "#{i}" +'.txt'))
  )
end  

为了简短起见,我尝试将标题变量更改为:(
注意标题-“#{i}”)

title  = File.read(File.join(Rails.root, '/features/support/titles/title-' + "#{i}" + '.txt'))

但我收到此错误:
未定义的局部变量或方法'i' for main:Object

任何提示如何制作一个可重用的短变量让我在迭代中使用它?

--更新 --
这篇文章没有完整的解决方案,从@Paul Fioravanti 的回答中我得到了另一种缩短代码的方法。url 必须存储在没有 File.open 方法的变量中,如下所示:

title_url  = '/features/support/titles/title-' + '%s' + '.txt'  

1.upto(4) do |i|
  PressRelease.create(
    :title => File.read(File.join(Rails.root, "#{title_url %i}"))
  )
end
4

1 回答 1

1

我从这个 StackOverflow 线程得到的这个解决方案怎么样,这样你就可以在循环中保持变量简短,并且在定义变量时不需要定义编号文件title

title  = File.read(File.join(Rails.root, '/features/support/titles/title-' + '%s' + '.txt'))
1.upto(4) do |i|
  PressRelease.create(
    :title => title % i
  )
end
于 2012-12-25T01:50:19.720 回答