DataMapper, how to create multiple records?
My example datamapper class
class Simple
include DataMapper::Resource
property :id, Serial
property :uid, Integer
end
And I have an array id uid's I would like to add.
items=[1,2,3,4,5,6,7,8,9,1,1,1,2,2,2,3]
If I wa开发者_开发技巧nted to search for any of the id's in the array I would do something like
Simple.all(:uid.in=>items)
Is there a way to do the same for creating multiple records such as:
Simple.create(:uid=>items) #this doesn't work by the way
A way around this is:
items.each{|item|Simplel.create(:uid=>item)}
But this can't be efficient,there has to be a better way.
There's no easier way in DataMapper. Most ORMs don't bother with bulk operations because they often require database-specific implementations. One of the few ORMs that does is SQLAlchemy: http://www.sqlalchemy.org/docs/05/sqlexpression.html#executing-multiple-statements
I'm not aware of any bulk insert operations on the SQL layer. Think of the SQL database for which data_mapper is the abstraction layer. Mind you that each database author/manufacturer implemented its own tool (eg. SQLLDR for Oracle, BCP for MS SQL Server).
There is no way for the abstraction layer to bring this into a single interface.
精彩评论