0

我认为最好的解决方案就是像下面这样写。

生产发布前

if Category.count == 0 categories = Category.create([{ name: 'business' }, { name: 'sport' }) end

if Category.count == 0
  categories = Category.create([{ name: 'business' }, { name: 'sport' })
elsif Category.count == 2
  Category.create([{ name: 'science' }])
  categories = Category.all
end

这有点失败,因为我[{ name: 'hoge' }]每次添加数据时都必须写。我可能会错过计算块Category.count === COUNT中的哪个elsif

有更好的解决方案吗?

我认为如果它能够从某个数组中添加/删除一些值来更新主数据会很好。

4

2 回答 2

0

我更喜欢使用seed_fu 之类的东西来管理种子数据。我还添加了一个 rake 任务以在每次部署时执行种子。

于 2012-10-31T14:02:12.870 回答
0

将 find_or_create 与数据数组一起使用:

category_data = [
  { name: 'business' },
  { name: 'sport' }
]

category_data.each do |d|
  Category.find_or_create_by(d)
end

编辑:抱歉,这是 Rails 4 中的语法...

category_data.each do |d|
  Category.where(d).first_or_create()
end
于 2012-10-31T14:06:25.953 回答