2015-10-20 69 views
1

我正在使用Sequel gem批量更新MySql中的用户。如何在批量更新中使用Sequel Gem返回更新的记录

users = Users.filter(:id => ids).all 
raise if users.nil? 

updated_users = Users.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id}) 
p updated_users 
# => 3 

Sequel documentation

“更新[删除]应该返回受影响的行数......”

因此上述行为的预期,但我的问题是,我怎么能得到续集宝石返回更新的记录,而不是受影响的记录数量?

我期待这种行为:

users = Users.filter(:id => ids).all 
raise if users.nil? 

updated_users = Users.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id}) 
p updated_users 
# => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>] 

回答

0

那么,这是什么样的DB返回,以便续集做什么开发人员希望它做的事。相反,这样做:

users = Users.where(:id => ids) 
raise if users.empty? 

updated_users = Users.where(:id => addon_ids) 
updated_users.update({deleted: 1, moderator_id: moderator_id}) 
p updated_users 
# => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>] 

这样你就不会受影响的行数分配给updated_users

0

对于那些可能仍在寻找这个的人,根据您的数据库引擎,您可以使用returning

updated_users = Users.returning.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id}) 
p updated_users 
# => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>] 

文档:http://www.rubydoc.info/github/jeremyevans/sequel/Sequel%2FDataset%3Areturning