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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Ruby on Rails

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

Q&A

1回答

2330閲覧

rails で、 update_counters がうまくいかない

kawasin73

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Ruby on Rails

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

0グッド

0クリップ

投稿2015/08/15 06:42

socialization というgem をつかって、ユーザー同士のフォローを行おうとしています。
ユーザーがフォローするごとに、followee_count が増えて行くはずなのですが、増えません。

調べて行くと、socialization/lib/socialization/stores/active_record/mixins/base.rb:7 の
update_counters がうまくいっていないようなのです。
rails console --sandbox で試しに、update_counters をやってみました。

shell

1irb(main):063:0> User.update_counters(user.id, followees_count: +12, sign_in_count: +2) 2 SQL (0.3ms) UPDATE `users` SET `followees_count` = COALESCE(`followees_count`, 0) + 12, `sign_in_count` = COALESCE(`sign_in_count`, 0) + 2 WHERE `users`.`id` = 2 3=> 0 4irb(main):064:0> user 5=> #<User id: 2, provider: "email", uid: "test2@test.com", encrypted_password: "$2a$10$rrOigWmBP74wJnOg.aW1zeKD7Qbm059ujTWhZpo23VX...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, confirmed_at: nil, confirmation_sent_at: nil, unconfirmed_email: nil, name: "hehe", nickname: nil, image: nil, email: "test2@test.com", tokens: {}, created_at: "2015-08-15 06:07:28", updated_at: "2015-08-15 06:07:28", followees_count: 0, followers_count: 0> 6irb(main):065:0> User.update_counters(user.id, followees_count: +12, sign_in_count: +2) 7 SQL (0.2ms) UPDATE `users` SET `followees_count` = COALESCE(`followees_count`, 0) + 12, `sign_in_count` = COALESCE(`sign_in_count`, 0) + 2 WHERE `users`.`id` = 2 8=> 0 9irb(main):066:0> user 10=> #<User id: 2, provider: "email", uid: "test2@test.com", encrypted_password: "$2a$10$rrOigWmBP74wJnOg.aW1zeKD7Qbm059ujTWhZpo23VX...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, confirmed_at: nil, confirmation_sent_at: nil, unconfirmed_email: nil, name: "hehe", nickname: nil, image: nil, email: "test2@test.com", tokens: {}, created_at: "2015-08-15 06:07:28", updated_at: "2015-08-15 06:07:28", followees_count: 0, followers_count: 0> 11 12

このように、update_countersがうまくいきません。
どうやら、SQL 文 の

sql

1COALESCE(`followees_count`, 0) + 12

が計算されていないようです。

どうすればいいでしょうか?

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

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

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

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

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

guest

回答1

0

ruby

1User.update_counters(user.id, followees_count: +12, sign_in_count: +2) 2user.reload

で想定通りに動作しませんか?

投稿2015/08/20 15:07

hello-world

総合スコア1342

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問