1

我目前正在为我的数据库播种,下面的部分给了我一些我没想到的结果:


trim.model_years.find_or_create_by_value([
 {value: '2009 (58)'},
 {value: '2009 (09)'},
 {value: '2009 (59)'},
 {value: '2010 (59)'},
 {value: '2010 (10)'},
 {value: '2010 (60)'},
 {value: '2011 (60)'},
 {value: '2011 (11)'},
 {value: '2011 (61)'},
])

我本来希望这会单独处理每一个,并为记录执行 find_or_create (我从普通的创建方法调整了格式,它只会创建 9 个单独的记录)。

然而,似乎正在发生的是我得到 1 条记录,这是一个包含所有记录的字符串,包括“值:”等。

如何格式化它以允许 9 个单独的记录被 find_or_created?

编辑:非常感谢关于迭代数组的答案 - 我现在似乎到了某个地方,但仍然有一个问题,即不是创建一个记录和附加关联,而是种子文件仍在创建重复记录每个循环。我在下面包含了我修改后的代码:


make = Make.find_or_create_by_value(value: 'Alfa Romeo')
model = make.models.find_or_create_by_value(value: '147')
trim = model.trims.find_or_create_by_value(value: '2.0 Lusso 5d (2001 - 2005)')
values = [
 {value: '2001 (X)'},
 {value: '2001 (Y)'},
 {value: '2001 (51)'},
 {value: '2002 (51)'},
 {value: '2002 (02)'},
 {value: '2002 (52)'},
 {value: '2003 (52)'},
 {value: '2003 (03)'},
 {value: '2003 (53)'},
 {value: '2004 (53)'},
 {value: '2004 (04)'},
 {value: '2004 (54)'},
 {value: '2005 (54)'},
 {value: '2005 (05)'}
]
values.each do |item|
  trim.model_years.where(item).first_or_create
end

当然,有很多这样的块,所有这些都应该重复使用相同的模型年份,但 first_or_create 似乎总是在创建重复项。

4

1 回答 1

2

通过迭代你的数组:

values = [
  {value: '2009 (58)'},
  {value: '2009 (09)'},
  {value: '2009 (59)'},
  {value: '2010 (59)'},
  {value: '2010 (10)'},
  {value: '2010 (60)'},
  {value: '2011 (60)'},
  {value: '2011 (11)'},
  {value: '2011 (61)'},
]

values.each do |item|
  trim.model_years.find_or_create_by_value(item[:value])
end

顺便说一句,Rails Guides 建议使用first_or_create而不是find_or_create_by. 使用first_or_create您的代码可能如下所示:

values.each do |item|
  trim.model_years.where(item).first_or_create
end

对不起,但我不明白你的新问题。这不应该创建重复的记录。它应该为每个模型创建模型年份。像这样的东西:

id | model_id | value
=========================
 1 |        1 | 2001 (X)
 2 |        1 | 2001 (Y)
 3 |        1 | 2001 (51)
 4 |        1 | 2002 (51)
 5 |        1 | 2002 (52)
 6 |        2 | 2001 (X)
 7 |        2 | 2001 (Y)
 8 |        2 | 2001 (51)

所以,是的,会有重复的值,但所有的行都是唯一的。如果这不是你想要的,你必须改造你的数据库。

于 2012-07-31T15:53:12.593 回答