更新Rails种子数据的最佳实践是什么?

6

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

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


所以我听到的是没有正确的方法来做这件事。应该有一个种子 rake 任务,就像迁移一样,考虑到已经输入的种子数据。也许我会去做那个。 - Joel Jackson
你最终做出来了吗? - Joshua Pinter
4个回答

2

借鉴前人经验

看一下SeedFu这个宝石。

它可以让你创建一个像这样的种子文件,自动链接到一个或多个列:

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

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


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

-1
如果您认为某个任务应该有一个 rake 任务,您可能需要检查可用的任务。
rake -T seed
rake db:seed  # Load the seed data from db/seeds.rb

话虽如此,seed_fu 在我看来提供了更好的功能


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接