在我的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'用于main:Object
任何提示如何制作一个可重复使用的短变量,让我在迭代中使用它?
- 更新 -
这篇文章没有一个完整的解决方案,从@Paul Fioravanti的答案中我得到了一种缩短代码的替代方法。必须在没有File.open方法的情况下将url存储在变量中,如下所示:
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
答案 0 :(得分:1)
我从this StackOverflow thread得到的这个解决方案怎么样,所以你可以将变量保持在你的循环内,并且在定义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