ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新

标签 ruby-on-rails ruby ruby-on-rails-3

给定这段代码

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(没有其他用户 ID),这就是我得到的:

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", :id => [4,53] )
=> 1
irb(main):011:0> u.class
=> Fixnum

如果你想得到被修改的记录,你必须使用“更新”,传入一个ID值列表,然后你将收到实例化的对象。

请注意,如果您有很多 ID,则实例化太多对象很容易使服务器的内存不堪重负。

我能想到的另一种方法是首先查询将要升级的对象(使用对象分组并只从表中选择您需要显示的属性,从而节省内存),生成您的报告,然后运行 ​​Update_All 查询...

关于ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023332/

相关文章:

ruby-on-rails - 在 Ruby 中返回 true 或错误消息

ruby-on-rails - 哪种标记语言? Markdown 还是?

javascript - Rails生产模式下如何压缩/public中的js,css文件

Javascript 对象字面量、POST 问题

javascript - rails : unobtrusive checkin function

ruby-on-rails - Rails App 谷歌索引

Ruby Sequel 模型对创建和不更新进行验证

ruby-on-rails - Rails 4 Action 邮件程序 SMTP-AUTH 错误缺少密码?

html - 在 Ruby 中寻找 CSS 解析器

css - 关于label标签的几个问题