Saving multiple objects in a single call in rails

后端 未结 6 481
無奈伤痛
無奈伤痛 2020-12-12 13:25

I have a method in rails that is doing something like this:

a = Foo.new(\"bar\")
a.save

b = Foo.new(\"baz\")
b.save

...
x = Foo.new(\"123\", :parent_id =&g         


        
6条回答
  •  轮回少年
    2020-12-12 13:54

    One of the two answers found somewhere else: by Beerlington. Those two are your best bet for performance


    I think your best bet performance-wise is going to be to use SQL, and bulk insert multiple rows per query. If you can build an INSERT statement that does something like:

    INSERT INTO foos_bars (foo_id,bar_id) VALUES (1,1),(1,2),(1,3).... You should be able to insert thousands of rows in a single query. I didn't try your mass_habtm method, but it seems like you could to something like:

    
    bars = Bar.find_all_by_some_attribute(:a) 
    foo = Foo.create
    values = bars.map {|bar| "(#{foo.id},#{bar.id})"}.join(",") 
    connection.execute("INSERT INTO foos_bars (foo_id, bar_id) VALUES
    #{values}")
    

    Also, if you are searching Bar by "some_attribute", make sure you have that field indexed in your database.


    OR

    You still might have a look at activerecord-import. It's right that it doesn't work without a model, but you could create a Model just for the import.

    
    FooBar.import [:foo_id, :bar_id], [[1,2], [1,3]]
    

    Cheers

提交回复
热议问题