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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2377閲覧

railsでnewメソッドが定義されていないというエラーを解消したい,NoMethodError in ReviewsController#new

miyaengineer

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/04/01 21:23

編集2021/04/01 22:27

前提・実現したいこと

プログラミング初学者です。
何卒よろしくお願い申し上げます。

現在Ruby on Rails + Docker + MySQLにてバイクレビュー投稿アプリを開発中でございます。
とても基礎的な部分なのですが、newメソッドがどうしてもNoMethodErrorとして返され、何日も四苦八苦しているのでご質問させていただきました。

レビューを投稿させる画面へ遷移するとNoMethodErrorが発生します。

レビュー投稿には
①ActiveStorageを用いた写真投稿
②ActiveHashを用いたカテゴリー選択
③Ratyを用いた星評価
を実装予定です。

わかりやすく対象のコントローラー、モデル名などをreviewに変更しております。

発生している問題・エラーメッセージ

NoMethodError in ReviewsController#new undefined method `new' for Review:Module Extracted source (around line #7): 5 6 def new 7  @review = Review.new 8 end 9

エラーログ

Started GET "/reviews/new" for 172.31.0.1 at 2021-04-01 20:02:52 +0000 Cannot render console from 172.31.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 Processing by ReviewsController#new as HTML Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms | Allocations: 2302) NameError (uninitialized constant ReviewsController::Reviews): app/controllers/reviews_controller.rb:7:in `new'

該当のソースコード

reviews_controller.rb コントローラーファイル
class ReviewsController < ApplicationController def index @user = User.new end def new @review = Review.new end end
review.rb モデルファイル
class Review < ApplicationRecord with_options presence: true do validates :bike validates :review # NOT NULLに加えて星評価を1〜5までに限定 with_options numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 5 } do validates :recommend validates :comfort validates :fuel validates :maintenance validates :cost validates :speed validates :look end end # ActiveHashの空白保存不可を付与 with_options numericality: { other_than: 0 } do validates :displacement_id validates :maker_id validates :type_id end # アソシエーション belongs_to :user has_many :comments has_one_attached :image extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :displacement belongs_to :maker belongs_to :type end
route.rb ルーティングファイル
Rails.application.routes.draw do devise_for :users root to: "reviews#index" resources :reviews, only: [:index, :new] end
/new.html.erb 新規投稿画面ビューファイル
<%= render "shared/second-header"%> <div>Hello</div> <%= render "shared/second-footer" %>
user.rb ユーザーモデルファイル(アソシエーションで紐づいているため)
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :nickname, presence: true has_many :reviews has_many :comments end
comment.rb コメントモデルファイル(アソシエーションで紐づいているため)
class Comment < ApplicationRecord validates :text, presence: true belongs_to :user belongs_to :review end

試したこと

・「NoMethodError in Controller#new」といったキーワードで検索するも参考記事は見つからず。
・indexアクションにおいてUser.newは正常に動作しているため、環境上newメソッドが動かないとは考えにくい。
・ルーティングの定義に異常はないか確認したが、特に見当たらない。
・仮にnewメソッドの行をコメントアウトし、リロードすると投稿画面は表示される。(ビュー内容についてはまだ未実装)
・他のアクションでもReviewというオブジェクトでメソッドが働くか確認。
→例えばindexアクションにおいて、Review.allを実践すると、やはりNoMethodErrorが生じた。
Reviewのインスタンスが作成できない、つまりreviewにおけるモデルファイルがもっとも怪しいと考えた。綴ミスはなし。中身をコメントアウトしてみるもエラー解消せず。
→アソシエーションの関連を疑い、userモデルファイルcommentモデルファイルのアソシエーションを確認するも異常は見当たらず。
→マイグレーションファイルと見比べても、モデルのカラム名などに不整合は見当たらず。
・各モデル(user,review,comment,displacement,maker,type)がRubyの予約語に該当するか確認→該当なし。
・ActiveHashのモデルの記述ミスを確認→異常なし

補足情報(FW/ツールのバージョンなど)

各種バージョン

ruby : 2.6.5
rails : 6.1.3
docker : 20.10.5
mysql : 5.7

閲覧いただき誠にありがとうございます。
情報不足がございましたら、遠慮なくおっしゃってください。
何かヒントでもいただけたら幸いでございます。
お時間取らせてしまい恐縮ですが、何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

undefined method `new' for Review:Moduleというメッセージのとおり、Reviewモジュールとして認識されています。class Reviewが見えない状態です。

どこかでmodule Reviewclass Review::Something(Railsの環境上、自動でmodule Reviewを宣言することがある)などを宣言していないか探してみましょう。

投稿2021/04/01 22:50

maisumakun

総合スコア145184

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

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

miyaengineer

2021/04/01 22:58

ご回答いただきありがとうございます! とてもわかりやすくご説明していただき恐縮です。 おっしゃる通り、Railsアプリ立ち上げ時に、config/application.rbファイルの中にmodule Reviewとして定義がなされておりました。 今回の原因はアプリ名が「Review」でレビュー投稿に必要なコントローラーやモデル名も「Review」としていたことが原因のようです。 これからコントローラーやモデル名の変更をしていこうと思います・・・。大変なことになりました(汗)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問