ruby-on-rails – 如何验证是否在Rails中实际更新了update_all
发布时间:2020-12-17 03:29:43 所属栏目:百科 来源:网络整理
导读:鉴于此代码 def create @upgrades = User.update_all(["role = ?","upgraded"],:id = params[:upgrade]) redirect_to admin_upgrades_path,:notice = "Successfully upgraded user." end 如果保存或不重定向到适当的页面和消息,我如何在该操作中实际验证?
鉴于此代码
def create @upgrades = User.update_all(["role = ?","upgraded"],:id => params[:upgrade]) redirect_to admin_upgrades_path,:notice => "Successfully upgraded user." end 如果保存或不重定向到适当的页面和消息,我如何在该操作中实际验证? 解决方法
在Rails3中,update_all不会返回任何有意义的信息,除了更新的记录数(这可能取决于您的DBMS是否返回该信息).
http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000343 它不会实例化任何对象,您可以通过查看日志来验证这一点. 如果我的数据库中有用户ID为4和5(没有其他),这就是我得到的: irb(main):007:0> u = User.update_all( "id = id",:id => 5 ) => 1 irb(main):008:0> u = User.update_all( "id = id",:id => 55 ) => 0 irb(main):009:0> u = User.update_all( "id = id",:id => [4,5] ) => 2 irb(main):010:0> u = User.update_all( "id = id",53] ) => 1 irb(main):011:0> u.class => Fixnum 如果要获取已修改的记录,则必须使用“更新”,传入ID值列表,然后您将收到实例化的对象. 请注意,如果您拥有大量ID,则可以通过实例化太多对象轻松压倒服务器的内存. 我能想到的另一种方法是首先查询将要升级的对象(使用对象分组,只选择需要显示的表中的属性,从而节省内存),生成报告,然后运行Update_All查询… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |