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

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

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

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

404閲覧

renderしたはずのページが表示されない

rararuri

総合スコア11

Ruby on Rails 6

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2021/12/03 10:24

環境

Ruby on Rails 6
Amazon Linux2
Amazon EC2

問題が起こった経緯

動画サイトでの検索→検索結果画面表示の途中で問題が起きました。
1.共通レイアウト内の検索フォームを使って検索
2.検索機能(search)で検索:
ファイル名(:key)またはカテゴリー名(:category)で動画テーブルをWhere
3.検索機能(search)で検索結果画面をrender
4.検索結果画面(search_result):検索結果を一覧表示

問題

renderしたはずの検索結果画面(search_result)が表示されません。

Rendered s3files/search_result.html.erb within layouts/application (Duration: 3.8ms | Allocations: 628)

代わりにrootURLに設定したホーム画面が表示されます。
ログインしていなかったためrootに遷移されたわけでもありませんでした。
初めての類の問題で困っております。

関連ファイル

routes.rb

Ruby

1Rails.application.routes.draw do 2 root 's3files#home' 3 resources :users do 4 resources :channels 5 end 6 get 's3files/home', to: 's3files#home' 7 get 's3files/music', to: 's3files#music' 8 get 's3files/movie', to: 's3files#movie' 9 get 's3files/program', to: 's3files#program' 10 get 's3files/game', to: 's3files#game' 11 get 's3files/news', to: 's3files#news' 12 get 's3files/sports', to: 's3files#sports' 13 get 's3files/learning', to: 's3files#learning' 14 post 's3files/search', to: 's3files#search' 15 get 's3files/search_result', to: 's3files#search_result' 16 resources :s3files 17 resources :comments 18 resources :sessions, only: %i[create] 19end

##s3files_controller.rb

Ruby

1class S3filesController < ApplicationController 2 3 skip_before_action :check_logged_in 4 5 ------------------------省略------------------------ 6 7 def home 8 @s3files = S3file.all 9 @trend = S3file.joins(:one_day_view).order(count: :desc).limit(10) 10 end 11 12 ------------------------省略------------------------ 13 14 def search 15 if params[:key] 16 @s3files = S3file.where(key: params[:key]) 17 else params[:category] 18 @s3files = S3file.where(key: params[:key]) 19 end 20 render 'search_result' 21 end 22 23 24 def search_result 25 end 26 27 private 28 ------------------------省略------------------------ 29 30 def s3file_params 31 params.require(:s3file).permit(:key, :image, :category, :channel_id) 32 end 33 34 ------------------------省略------------------------ 35end 36

application.html.erb

Ruby

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>Stream</title> 5 <%= csrf_meta_tags %> 6 <%= csp_meta_tag %> 7 8 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 9 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> 10 </head> 11 <body> 12 <header> 13 <% if current_user %> 14 <%= link_to(current_user.name, current_user) %> 15 <% else %> 16 <%= link_to "ゲストログイン(閲覧用)", sessions_path, method: :post %> 17 <% end %> 18 <%= render 's3files/search_form' %> 19 </header> 20 <%= yield %> 21 </body> 22</html>

##_search_form.erb

Ruby

1<h2>検索フォーム</h2> 2<%= form_with(model: S3file.new, url: '/s3files/search') do |form| %> 3 <%= form.label :key %> 4 <%= form.text_field :key %> 5 <%= form.label :category %> 6 <%= form.text_field :category %> 7 <%= form.submit "検索" %> 8<% end %>

search_result.html.erb

Ruby

1<h1>検索結果</h1> 2<% @s3files.each do |s3file| %> 3 <p>チャンネル名:<%= s3file.channel.name %></p> 4 <p>動画タイトル:<%= s3file.key %></p> 5 <%= link_to(image_tag("https://bucket-for-stream.s3.ap-northeast-1.amazonaws.com/assets#{s3file.id.to_s}/#{s3file.image}"), s3file) %> 6<% end %>

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

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

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

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

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

guest

回答1

0

自己解決

form_withの引数にlocal: trueを指定するとレンダリングされました。
Rails6.0のform_withはデフォルトでajaxという非同期通信を使ってページを表示するようです。
要はajaxという新種の描画処理を意図せず使っていたことがエラーの原因でした。

投稿2021/12/03 15:20

rararuri

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問