我正在寻找一种解决我的rails应用程序中的性能问题的好方法。我有三个表:中间有一对一到多个连接。如果我想用第一个表中的130个项填充下表的所有数据,它会产生大约1000个查询,大约需要10秒(SQLite DB)。
我找到了
accept_nested_attributes_for
语句,使您可以在一行代码中输入多个表的数据。我的问题是,从性能的角度来看,这是一个很好的选择。有人有经验吗?
由于 马库斯
答案 0 :(得分:0)
这里是:
Table: cards
front_side_id
back_side_id
Table: card_sides
Table: card_side_entries
card_side_id
我现在有这样的XML:
<Cards>
<Card>
<FrontSide>
<CardSideEntries>
<CardSideEntrie/>
...
</CardSideEntries>
</FrontSide>
<BackSide>
<CardSideEntries>
<CardSideEntrie/>
...
</CardSideEntries>
</BackSide>
</Card>
...
</Cards>
在我的解决方案中,我逐行解析整个XML文件,因为我有时需要card_id,我必须两次保存某个表项...现在有人关于accept_nested_attributes_for吗?
谢谢, 马库斯
答案 1 :(得分:0)
accept_nested_attributes_for增加 ActiveRecord 的可能性,以便能够直接从一个模型写入关联。
示例: 你有这样的模型:
class User
accepts_nested_attributes_for :cars
end
class Car
belongs_to :user
end
和哈希一样:
param[:user] = {}
params[:user][:name] = "Mike"
params[:user][:car] = {}
params[:user][:car][:brand] = "Nissan"
User.create(params[:user])
这将创建一个新用户和一辆新车, 没有 accepts_nested_attributes_for :
@user = User.create(params[:user])
@car = Car.create(params[:user][:car])
@user.car = @car
此功能通常与HTML表单中的 fields_for 一起使用,因此您可以轻松处理对象及其关联的创建。
在你的情况下,我想象你的模型(关于你的XML):
class Card
has_one :front_side, :class => "Side"
has_one :back_side, :class => "Side"
end
class Side
belongs_to :card
has_many :card_side_entry
end
class CardSideEntry
belongs_to :side
end
我不知道你的XML来自哪里(你的数据是从中提取的?),但我想你可以使用accepts_nested_attributes_for,这样你就可以让每个卡片哈希生成关联。 但我不确定是否了解所有问题以及这是否是最佳解决方案