在seed.rb中的变量里面的Rails迭代变量

时间:2012-12-24 23:30:43

标签: ruby-on-rails-3 refactoring

在我的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

1 个答案:

答案 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