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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1322閲覧

Rails6のデプロイの際に「The page you were looking for doesn't exist」が発生する問題

msy7822

総合スコア17

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/10/15 14:22

編集2020/10/15 14:57

作ろうとしているアプリケーションの概要

Railsを用いて、ユーザーがログイン後に、一覧に乗っている映画に投票し、その投票結果に応じて一覧ページの映画の並び順が変わるという簡単なWEBアプリケーションです。

テーブルは、個々の映画情報を格納した「Movieテーブル」と、個々のユーザー情報を格納した「Userテーブル」と、どのユーザーがどの映画に投票したかと言う「Voteテーブル」(中間テーブル)を用意しました。

ActiveRecord::Schema.define(version: 2020_10_14_063658) do create_table "movies", force: :cascade do |t| t.string "title" t.text "story" t.string "image" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "points" end create_table "users", force: :cascade do |t| t.string "name" t.string "email" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.string "password_digest" t.index ["email"], name: "index_users_on_email", unique: true end create_table "votes", force: :cascade do |t| t.integer "user_id" t.integer "movie_id" t.text "comment" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end end

今回発生している問題

ローカル環境上では特に問題なく、ユーザー詳細ページにアクセスできていたが、本番環境上でユーザー詳細ページにアクセスしようとすると「The page you were looking for doesn't exist」が表示されてしまう。

開発者ツールを使って見たら、これは自分の推測ですが、「/users/1」(1はユーザーのid)の1を「1」という名前のファイルがあるという風にコンピュータが勘違いしているのだと考えています。

実際に試したこと

・ config.assets.compile = false を config.assets.compile = true に書き換えた。
・ turbolinksの完全無効化(gemをコメントアウトし、読み込みを行っている部分もコメントアウトした)
・ rootパスの定義

問題があると思われる部分

ユーザー詳細ページのコード <%= provide(:title, @user.name) %> <div class="user bg-light p-4 rounded"> <h1 class="text-muted"><i class="fas fa-address-card text-muted mr-1"></i> プロフィール</h1> <div class="d-flex mt-4"> <div class="border border-dark rounded p-3 w-50 mr-2 text-center text-muted"> <h4><i class="fas fa-file-signature text-muted mr-1"></i>name</h4> <%= @user.name %> </div> <div class="border border-dark rounded p-3 w-50 ml-2 text-center text-muted"> <h4><i class="fas fa-envelope-square text-muted mr-1"></i> email</h4> <%= @user.email %> </div> </div> </div> <br /> <% if current_user && current_user == @user %> <%= link_to '編集する', edit_user_url(current_user), class: 'btn btn-primary' %> <%= link_to '削除する', user_url(@user), method: :delete, data: {confirm: "削除しますか?"} ,class: 'btn btn-danger' %> <% end %> <hr /> <%= 'ユーザーが投票した作品の一覧' %> <br> <br> <div class="bg-light mb-4 rounded" style="width: 100%;"> <% if @movies != [] %> <div class="d-flex flex-wrap justify-content-around"> <%# 同じ映画複数回投票した場合に、重複を防ぐ %> <% @movies.uniq.each do |movie| %> <div class="card mt-4 mb-4" style="width: 18rem;"> <% if movie.image? %> <%= image_tag movie.image.url, style: 'height: 400px;' %> <% end %> <div class="card-body"> <h5 class="card-title"><%= movie.title %></h5> <p class="card-text"><%= text_num_over(movie.story) %></p> </div> <%= link_to '詳しく見る', movie_url(movie), class: "m-3 btn btn-primary" %> </div> <% end %> </div> <% else %> <%= 'ユーザーが投票した作品はありません' %> <% end %> </div>

UsersController

1 def index 2 @users = User.all 3 end 4 5 def show 6 @user = User.find(params[:id]) 7 @votes = Vote.where(user_id: @user.id) 8 9 # ユーザーが投票ないしは、コメントした映画情報を格納する配列 10 @movies = movies(@votes) 11 end

UsersHelper

1 def movies(vote_arr) 2 # ユーザーが投票ないしは、コメントした映画情報を格納する配列 3 movies = [] 4 vote_arr.each do |vote| 5 movies << Movie.find(vote.movie_id) 6 end 7 return movies 8 end 9

イメージ説明

不足しているリソースなどは、必要に応じて掲載させていただきます。ご回答お待ちしております。
よろしくお願いいたします。

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

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

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

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

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

hatsu

2020/10/15 14:41

herokuのログをみたいです。 heroku logs -tとやってエラージにアクセスしたときのログをはっていただけますでしょうか。 UserID1番のユーザーがいない、heroku run rails db:migrateをやってないあたりが原因かなと思っていたりします。
msy7822

2020/10/15 14:53

わかりました!
hatsu

2020/10/15 15:02

/users/1にアセクスしたときに404になっているのがログから確認できます。 UserID1番のユーザーは本番のDBに存在しますでしょうか? たとえば 1. heroku run rails c 2. User.find(1) という手順でおこなってUserID1番のユーザーは表示さたら存在するかと。
msy7822

2020/10/15 15:07

表示はされています!
guest

回答1

0

ベストアンサー

ログ見ると
Couldn't find Movie with id=1のようになっていますね
たぶんここ Movie.find(vote.movie_id)ですね。つまりvote.movie_idが1のときにMovieの1番のデータがないのかな、と。なのでデータを用意したら解決する気がします。

また

movies = [] vote_arr.each do |vote| movies << Movie.find(vote.movie_id) end return movies

Movie.where(id: vote_arr.pluck(:movie_id))

とも書けそうです。

投稿2020/10/15 15:15

編集2020/10/15 15:23
hatsu

総合スコア1809

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

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

msy7822

2020/10/15 15:47

丁寧なご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問