使用find_or_create_by为数据库设定种子

Car*_*rds 0 database activerecord model ruby-on-rails

我目前正在我的应用程序中创建种子文件,并希望确保使用find_or_create_by帖子中的建议不会创建重复项.我正在使用find_or_create_by_name但得到此错误:

NoMethodError: undefined method `find_or_create_by_name' for #<Class:0x007fa9680cb688>
Run Code Online (Sandbox Code Playgroud)

这就是我在种子文件中使用的内容

Genre.find_or_create_by_name([
    {name: "Alternative"}, 
    {name: "Country"}, 
    {name: "Electronic"}
    ])
Run Code Online (Sandbox Code Playgroud)

也值得一提.如果我有一个模型名称的唯一性验证器find_or_create_by仍然是必要的吗?

inf*_*sed 5

较新版本的Rails使用略有不同的语法:

Genre.find_or_create_by(name: 'Alternative')
Run Code Online (Sandbox Code Playgroud)

find_or_create_by不支持一次添加多个记录,因此您必须构造一个哈希数组并调用find_or_create_by多个时间:

hashes = [
  {name: "Alternative"}, 
  {name: "Country"}, 
  {name: "Electronic"}
]

hashes.each do |hash|
  Genre.find_or_create_by(hash)
end
Run Code Online (Sandbox Code Playgroud)