🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

2回答

1016閲覧

登録したユーザーのレビュー数のみ取得、表示したい

runban

総合スコア152

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

1クリップ

投稿2021/02/23 07:54


最寄りのカフェを検索することのできるアプリを作成しています。
下記がアプリの仕様です。


######アプリの仕様
・アプリ内に登録しているカフェ情報に対して、ユーザーがレビューできるように設定しています。
・カフェ情報は「掲載申請・掲載許可・掲載禁止」の中からいずれかのデータを保持しており、「掲載許可」のデータのみユーザーからは表示できるようにしています。


また、下記がアプリのコード情報です。


######アプリのコード内容

schema

1create_table "reviews", force: :cascade do |t| 2 t.string "title" 3 t.string "body" 4 t.string "review_image_id" 5 t.integer "user_id" 6 t.integer "shop_id" 7 t.datetime "created_at", null: false 8 t.datetime "updated_at", null: false 9 t.float "rate", default: 0.0, null: false 10 end 11 12 create_table "shops", force: :cascade do |t| 13 t.string "name" 14 t.text "introduction" 15 t.string "address" 16 t.integer "genre_id" 17 t.time "start_business_hours" 18 t.string "station" 19 t.string "phone_number" 20 t.string "home_page" 21 t.string "holiday" 22 t.datetime "created_at", null: false 23 t.datetime "updated_at", null: false 24 t.time "finish_business_hours" 25 t.float "latitude" 26 t.float "longitude" 27 t.integer "is_active", default: 0

Topページにて、登録したユーザーのレビュー数を表示できるようにしたいのですが、どのように実装すれば良いのか分かりません。
手順としては、
「ReviewモデルとアソシエーションしているShopモデルから、「is_active」カラムが「1」(掲載許可)のものを取得する」
だと思うのですが、下記コード(controller)を記述するとエラーが発生してしまいます。

top

1<div class="col-md-4 text-center"> 2 <span class="fh5co-counter js-counter" data-from="0" data-to="<%= @review.count %>" data-speed="5000" data-refresh-interval="50"></span> 3 <span class="fh5co-counter-label">登録レビュー数</span> 4</div>

controller

1@reviews = Review.all.select(:shop_id) 2@review = @reviews.where(is_active: 1)

error

1ActiveRecord::StatementInvalid in User::Users#top 2Showing /home/ec2-user/environment/CafeWhere2/app/views/user/users/top.html.erb where line #296 raised: 3 4SQLite3::SQLException: no such column: reviews.is_active: SELECT COUNT("reviews"."shop_id") FROM "reviews" WHERE "reviews"."is_active" = ?

エラーを発生させずに、Topページにて登録したユーザーのレビュー数を表示できるようにするには、どのように記述すればよいのでしょうか。
何卒、よろしくお願いいたします。

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

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

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

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

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

winterboum

2021/02/23 09:35

「Topページにて、登録したユーザーのレビュー数を表示」 というのがよくわかりません。 Topでは何かの一覧を出す? Shopの一覧ですか? 「登録したユーザーのレビュー数」?? 「登録したユーザー」のレビュー数 ですか ユーザーが登録したレビュー ですか?
runban

2021/02/23 15:24

ご質問ありがとうございます。 下記にてご返信させていただきます。 ①Topでは何かの一覧を出す? Shopの一覧ですか? →全Shopを評価(評価はReviewモデルで行っています)した数の合計数を表示したいのです。 ②「登録したユーザーのレビュー数」?? 「登録したユーザー」のレビュー数 ですか ユーザーが登録したレビュー ですか? →「登録したユーザー」のレビュー数です。 説明が足らず、winterboum様にお手数をおかけしてしまい、申し訳ございませんでしたm(_ _)m 別途不明な点等がございましたら迅速にお答えさせていただきますので、何卒よろしくお願いいたします。
guest

回答2

0

controller

1@review = @reviews.where(is_active: 1)

Reviewテーブルのis_activeをサーチしていますが、
is_activeはReviewではなくShopテーブルにあります。
まず2つのテーブルをJoinしてからサーチしないといけないです。

投稿2021/02/23 23:49

gambaldia

総合スコア266

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

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

0

ベストアンサー

「説明が足りない」のではなく「誤解を招かない説明」に成っていないのです。

「登録したユーザー」のレビュー数 ということは、「登録していないユーザー」のレビューもある?(という質問が出るのも、曖昧だから)

「全Shopを評価した数の合計数」と言うことは全Review数?
でしたら
Review.count,
登録していないユーザーのレビューも有るのなら、Review.where(user_id: nil).count

追記
掲載許可がいるのか、でしたら
Review.joins(:shop).where("shops.is_active = 1").count

しかし、、、
掲載許可のないshopにreviewが付くってありえます?
Review.countで十分な気がする。

投稿2021/02/23 22:53

編集2021/02/24 00:05
winterboum

総合スコア23567

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

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

runban

2021/02/24 10:49

ご回答いただきありがとうございます。 ご教示頂いたコードで実行したところ、エラーが解決して求めていた結果が返ってきました。 また、下記にて頂いた質問についてお答えさせていただきます。 しかし、、、 掲載許可のないshopにreviewが付くってありえます? →shopの状態を「申請中・掲載許可・掲載禁止」から選択できるようにしていまして、userが確認できるshopは「掲載許可」されたカフェのみにしていました。 よって、表示したいレビュー数は「user側が確認できるカフェ」のレビュー数のみを表示したかったのです。 解決方法のご提示加えて質問文の書き方についても丁寧にご指摘いただき、感謝しております。 次回以降、誤解を招かない説明にならぬよう注意していきたいと思います。 今回は私の質問にお答えいただき、ありがとうございましたm(_ _)m 再度ご対応いただけることがございましたら、何卒よろしくお願いいたします。
winterboum

2021/02/24 10:52

表示したいレビュー数は「user側が確認できるカフェ」のレビュー数 にしたいのはわかっています。 で レビューをつけることが出来るのは「user側が確認できるカフェ」だけでは? ということは 「user側が確認できるカフェ」のレビュー数 と レビュー数 とは同じでは? という問いかけです
runban

2021/02/24 11:15 編集

(winterboum様)レビューをつけることが出来るのは「user側が確認できるカフェ」だけでは? ということは 「user側が確認できるカフェ」のレビュー数 と レビュー数 とは同じでは? という問いかけです →結論から申し上げますと、レビュー数は同じではございません。 と言いますのも、shopの状態を何かしらの理由で「掲載許可」から「掲載禁止」にした場合、user側では表示されないのですが、データとしては「掲載禁止」という状態で残っており、そのカフェについたレビュー情報も残ります。 一度「掲載許可」された状態で3件のレビューがつき、その後「掲載禁止」したshopをもう一度「掲載許可」すると、掲載禁止にする前の3件のレビュー情報を表示することができるようにしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問