環境
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 %>
回答1件
あなたの回答
tips
プレビュー