2012-07-31 30 views
1

我目前无欲无求我的数据库,下面的部分是给我的一些结果没想到:导轨 - find_or_create_by给人意想不到的效果


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(我修改了正常的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似乎总是创建重复。

回答

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的指南建议使用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) 

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

+0

非常感谢这一点,我想我现在正在某个地方 - 如果您可以提供帮助,我已经为我的问题添加了一个编辑以增加清晰度。 – 2012-07-31 17:56:34

+0

@HO,我不知道我是否理解你的新问题。我试着回答,但我不知道它是否有帮助。 – Mischa 2012-08-01 02:45:01

相关问题