現在、データベースをシードしていますが、以下のセクションで予期しない結果が得られています。
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 つの個別のレコードを作成する通常の作成メソッドからフォーマットを適応させました)。
しかし、起こっているように見えるのは、「value:」などを含むすべてのレコードを含む文字列である 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 が常に重複を作成しているようです。