web-dev-qa-db-ja.com

Rails 4ですべての条件付きクエリを更新する方法

Rails次のようなクエリが必要です:

UPDATE users SET name="test" WHERE name="test1"
20
Vijay Chouhan
User.update_all({name: 'test'},{name: 'test1'}) # deprecated since Rails 4

または

User.where(name: 'test1').update_all(name: 'test')
44
arieljuod
User.where("name like 'test1'").update_all("name = 'test'")
7
Peter Nixey

@Vijay Chouhan、これを試してみてください、これはあなたが要求したのと同じクエリを与えます。

ser.where(name: "test")->これにより、ActiveRecord :: Relation配列が得られるため、次のような単純な配列に変換します

= User.where(name: "test")。to_a

.countが= 1の場合、これを最終クエリとして使用します-

****最終クエリ-> **** User.where(name: "test")。to_a.first.update(name: "test1")

else u.countが1より大きい場合、次のようなループを作成します

****最終クエリ-> **** User.where(name: "test")。to_a.each {| x | x.update(name: "test1")}

それはあなたに役立つかもしれません...

                                **OR**

@Vijay Chouhanさん、こんにちは。

ちょうど今、私は最高の解決策を見つけました-

ser.where(name:test).update_all( "name = 'test1'")

0
Chitra

シングルチェック用

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

複数が必要な場合

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