2009-10-20 76 views
1

我一直在google搜索了一会儿数组,但还没有找到任何答案如何保存的模型轨道

我有模型称为答案,调查的问题。现在在一项调查中,最多可以有200个问题,因此一项调查可以在页面中生成多达200个答案模型。

的问题是:我怎么能回答的阵列我有保存在一个单一的DB-行动,并在阵列上不重复,节省每个单独的元素,这需要大量的时间比较?

+0

我发现这个http://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing - 你的表现/最后还有一个带有导入的扩展名。这可能是最简单的方法得到它速度快,根据评论,因为如果你指定例如myslq进口模块,然后做一个进口,它应该做的是在一个SQL动作。 – Hopeanuoli 2009-10-21 12:56:10

回答

1

您可以通过“belongs_to的”关系的:自动保存符号。这将导致在保存父项时自动保存答案。像这样的东西那么很可能是你想要什么:

class Survey < ActiveRecord::Base 
    has_many :questions 
end 

class Question < ActiveRecord::Base 
    belongs_to :survey, :autosave 
    has_one :answer 
end 

class Answer < ActiveRecord::Base 
    belongs_to :question, :autosave 
end 

我不知道究竟怎么了,这将在幕后进行的,但它可以让ActiveRecord的优化SQL并删除需要你明确地迭代在关系上。

+0

好吧,我试着用:autosave => true。现在我曾经通过调用调查<<在迭代中回答,但是同时保存它们来做到这一点。现在我试着使用survey.answers.build(hash_of_answer_attribues)然后保存父项,但是这给了我相同的结果:每个元素都单独添加到数据库 – Hopeanuoli 2009-10-20 10:36:12

0

不管你做什么,不要忘记你的包裹多个插入在一个事务中。会真的加快速度。