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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

1回答

279閲覧

レビュー数のカウント機能が正常に動作しない

begin1990

総合スコア31

Ruby on Rails

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

0グッド

0クリップ

投稿2018/02/03 12:59

アプリ:各地の名産品をレビューする

やりたいこと
商品ごとにレビュー数をカウントする

コード

application_controller.rb class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper private def require_user_logged_in unless logged_in? redirect_to login_url end end def counts(hokkaido) @count_hokkaido_reviews = hokkaido.hokkaido_reviews.count end def counts(touhoku) @count_touhoku_reviews = touhoku.touhoku_reviews.count end def counts(kantou) @count_kantou_reviews = kantou.kantou_reviews.count end end

hokkaidous_controllerのshowアクション

def show @hokkaido = Hokkaido.find(params[:id]) @hokkaido_reviews = @hokkaido.hokkaido_reviews.order('created_at DESC').page(params[:page]) counts(@hokkaido) end

touhokus_controllerのshowアクション

def show @touhoku = Touhoku.find(params[:id]) @touhoku_reviews = @touhoku.touhoku_reviews.order('created_at DESC').page(params[:page]) counts(@touhoku) end

kantous_controllerのshowアクション

def show @kantou = Kantou.find(params[:id]) @kantou_reviews = @kantou.kantou_reviews.order('created_at DESC').page(params[:page]) counts(@kantou) end

問題点
レビュー数のカウントが正常に機能しない
--具体例--
hokkaidos/showにアクセスすると以下のエラーが発生する
https://gyazo.com/0dbe931258296c3a5f8628422f8d7cc3

touhokus/showにアクセスすると以下のエラーが発生する
https://gyazo.com/a6ab26f502c56ac04cf86a66264a0d6f

kantous/showにアクセスしたときはエラーが発生しません。
https://gyazo.com/accd029d46f4d9e68142176dc83cf73f

ということは、application_controller.rbに記載されている通り、一番下の群にある、

def counts(kantou) @count_kantou_reviews = kantou.kantou_reviews.count end

が優先しているため、関東の商品のみ、レビュー数のカウント機能が正常に働いていると思います。

これを解決し、北海道・東北それぞれの商品のレビュー数のカウント機能も正常に働かせるにはどうすればいいでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

ApplicationController で同じ名前のメソッドが 3 回定義されています。
最後の定義がだけが生きます。

counts メソッドの定義をそれぞれのコントローラーに移せば解決するでしょう。

投稿2018/02/03 15:42

scivola

総合スコア2108

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

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

begin1990

2018/02/04 04:56

ご回答ありがとうございます。 解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問