質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

4回答

6880閲覧

カラムの値を取り出し、+1して保存する方法

taishiaaaaa

総合スコア30

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2018/11/20 11:50

命令が実行されるたびActiveRecordでUsersテーブルのcountカラムの値(integer)に、+1をして保存する
という動作を実装したいです。
今までupdate_attributeしか使ってこなかったため、既に保存されている値を変更する方法が分からない状態です。
教えて頂けないでしょうか。
回答いただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

@user.increment(:count, 1) @user.save

incrementメソッドを使えば特定のレコードの値を増やすことが出来ます。

@user.increment!(:count, 1)

increment!メソッドの場合、saveが必要無くなります。

投稿2018/11/21 00:31

haneru

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taishiaaaaa

2018/11/23 17:25

お返事遅くなって申し訳ありません、haneruさんのおかげで求めていた情報が得られました、回答ありがとうございました。
guest

0

参考情報

  • Rails4 でカウンター用カラムをインクリメントする

http://xyk.hatenablog.com/entry/2014/10/07/212304

...

  1. increment メソッドを使う
  2. increment_counter メソッドを使う
  3. カウンターキャッシュを使う
  4. counter_culture を使う
  • [Rails+MySQL] カウンターの実装 【なければ新規作成したいし、あれば適切にインクリメントしたい】

https://qiita.com/sensuikan1973/items/dcb79201cc87e76a65e9

...
補足
findで取得したModelのcountフィールドをインクリメントしてsaveするのはまずい。
ほぼ同時にリクエストがとんできたら...と考えるとつらいですね。
...
Rails4だと、increment!の採用は厳しい
Rails5なら、increment!の採用も視野
increment_counterを使うのはあり?
...
おわりに
仮にRails5なら、increment_counter (Rails5版)使いたいなーと思いました。touch引数あるのは地味にでかいですね。

投稿2018/11/24 00:37

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ActiveRecordで既存の値を+1したい、ということでしょうか?

@user = User.find(1) @user.update(count: @user.count += 1)

で可能だと思います。

投稿2018/11/20 13:43

troch

総合スコア349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQL

1UPDATE Users SET 2 count = count + 1 -- count は予約語になっている可能性が高いのでカラム名を変えた方が良い 3WHERE 対象行の条件 -- WHERE がなければ全行がUPDATEの対象になる

Ruby on Rails データ更新

user.age = 50 ↓ count = count + 1 -- count は予約語になっているかも?

同じSQLでもデータベースによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。 SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

投稿2018/11/20 13:06

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問