更新rails种子数据的最佳做法是什么?

时间:2011-12-22 01:07:13

标签: ruby-on-rails rake seed

我在生产中有一个带有种子数据的rails应用程序。我们需要添加更多种子数据,但使用rake db:populate将复制所有旧种子数据,当然我们不希望将数据添加到迁移中。

向应用程序添加额外种子数据的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

站在巨人护肩上

查看 SeedFu gem。

它允许您创建这样的种子文件,它自动链接到一个或多个列:

User.seed(:id,
  { id: 1, login: 'jon',   email: 'jon@example.com',   name: 'Jon'   },
  { id: 2, login: 'emily', email: 'emily@example.com', name: 'Emily' }
)

您还可以更新这些种子文件,它将处理更新数据库值。

这与 Seedbank 结合使用,是我最终使用的内容。

答案 1 :(得分:1)

您可能需要构建另一个rake任务。或者您可以对每个新行进行检查以查看它是否已存在。这样运行可能需要更长的时间,但至少你不会有重复。

答案 2 :(得分:1)

我在种子文件中使用了一个笨重的解决方法来阻止相同的数据被添加两次。

if Therapy.count == 0
    therapies = Therapy.create([
        { :name => 'Peritoneal dialysis'
        },
        { :name => 'Haemodialysis'
        },
        { :name => 'Plasma therapy'
        },
        { :name => 'Laparotomy'
        },
        { :name => 'Haemofiltration'
        }
        ])
end

我想这可以修改为以下

   if Therapy.count == 0
                therapies = Therapy.create([
                    { :name => 'Peritoneal dialysis'
                    },
                    { :name => 'Haemodialysis'
                    },
                    { :name => 'Plasma therapy'
                    },
                    { :name => 'Laparotomy'
                    },
                    { :name => 'Haemofiltration'
                    }
                    ])
    elsif Therapy.count == 4
              therapies = Therapy.create([
                    { :name => 'NEW THERAPY'
                    }
                    ])
    end

答案 3 :(得分:-1)

如果您认为某些事情应该有佣金任务,您可能需要检查可用的任务。

rake -T seed
rake db:seed  # Load the seed data from db/seeds.rb

据说seed_fu提供了更好的功能恕我直言