【问题标题】:How to write update all conditionally queries in rails4如何在rails 4中编写更新所有条件查询
【发布时间】:2013-11-20 17:14:29
【问题描述】:

我想要类似以下的 Rails 查询:

UPDATE users SET name="test" WHERE name="test1"

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4


    【解决方案1】:
    User.update_all({name: 'test'},{name: 'test1'}) # deprecated since Rails 4
    

    User.where(name: 'test1').update_all(name: 'test')
    

    【讨论】:

    • 我认为第一个选项现在实际上已经贬值了。
    • 在调试旧代码 15 分钟后可以确认,Rails 4 中不推荐使用第一行(希望他们给出警告!)。
    • 我还想指出,该语句是作为单个 update where 子句运行的,而不是单个 select where 然后是 update 语句。
    • 如何更新多个值,可以用User.where(name: 'test1').update_all(name: 'test', email: 'a@a.com')
    • @VignanS,是的,您可以根据需要传递任意数量的键:值对。
    【解决方案2】:
    User.where("name like 'test1'").update_all("name = 'test'")
    

    【讨论】:

    • 这将生成'UPDATE users SET name="test" WHERE name LIKE "test1"',结果相同,但OP要求的查询不同编辑:结果不同,LIKE不区分大小写,它还会更新名称为 TEST1 的行,例如
    【解决方案3】:

    单次检查

    User.where(name: 'test1').update_all(name: 'test')
    

    如果您需要多个

    User.where(name: ['test1','test2']).update_all(name: 'test')
    

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2014-12-20
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多