前提・実現したいこと
Ruby(Ruby on Rails)で格闘ゲームの技表のアプリを作っています。各技を文字や数字で部分検索できる機能をつけたいのですが、うまくいきません。。
とりあえずは技名だけでの検索機能の実装を試みています。ゆくゆくは他の要素(キャラクターやダメージなど)での検索や比較機能も実装できるようにしていきたいと思っています。
・CharacterとMoveモデルを作成し、一対多の関係でアソシエーションを組んでいる
・この内、検索したいのはMove=技の方
・検索機能はどのページでも表示する
###解決したい問題
検索機能用に、
・Moveモデルにsearchメソッド
・movesコントローラーにsearchアクション
・views/movesにsearch.html.erb、部分テンプレート_header.html.erb内に検索フォーム
をそれぞれ記述しています。無事に検索バーは表示されるのですが、エラーが出ます。
CharactersController#search is missing a template for request formats: text/html
どうやらviews/characterに表示するhtml.erbがないぞ、とのことだと思うのですが、Characterコントローラーは触れてないから関係ないのでは??と混乱してしまい、全く解決方法がわかりません。
該当のソースコード
1 ルーティング
ruby
1Rails.application.routes.draw do 2 root "characters#index" 3 resources :characters do 4 resources :moves, only: [:index, :search] 5 collection do 6 get 'search' 7 end 8 end 9end
2 モデル
ruby
1#moves.rb 2class Move < ApplicationRecord 3 belongs_to :character 4 5 def self.search(search) #self.はMove.を意味する 6 if search !="" 7 Move.where(['moves_name LIKE ?', "%#{search}%"]) #検索とmoves_nameの部分一致を表示。 8 else 9 Move.all #全て表示させる 10 end 11 end 12end 13 14 15#charavter.rb 16class Character < ApplicationRecord 17 has_many :moves 18end
3 コントローラー
ruby
1#moves.controller 2class MovesController < ApplicationController 3 4 def index 5 @character = Character.find(params[:character_id]) 6 @moves = @character.moves 7 end 8 9 def search 10 @moves = Move.search(params[:keyword]) 11 end 12 13end 14 15 16#characters.contoroller 17class CharactersController < ApplicationController 18 19 def index 20 @characters = Character.all 21 end 22 23end 24
4 ビュー
ruby
1 2#moves/search.html.erb 3 4<%= form_with(url: search_characters_path, local: true, method: :get, class: "search-form") do |form| %> 5 <%= form.text_field :keyword, placeholder: "技を検索する", class: "search-input" %> 6 <%= form.submit "検索", class: "search-btn" %> 7<% end %> 8 9<ul> 10 <% @moves.each do |move| %> 11 <li> 12 <%= move.moves_name %> 13 </li> 14 <% end %> 15</ul> 16 17 18#shared/_header.html.erb 19 20<div class="header"> 21 <%= form_with(url: search_characters_path, local: true, method: :get, class: "search-form") do |form| %> 22 <%= form.text_field :keyword, placeholder: "技を検索する", class: "search-input" %> 23 <%= form.submit "検索", class: "search-btn" %> 24 <% end %> 25</div> 26
推察
一連のMoveのファイルに検索機能を記述しているのに、部分テンプレートに検索フォームを貼り付けていることが問題なのかなと考えていますが、よくわかりません。どなたかご教授願います。
補足情報
markdown記述自体が慣れておらず、拙い質問の仕方になっているかもしれません。質問の仕方自体も勉強している最中ですので、そういった点や追加で必要な情報がある場合は遠慮なくお教えください!
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/21 02:35
2021/05/21 03:59
2021/05/21 04:13 編集
2021/05/21 08:04
2021/05/23 07:33
2021/05/23 07:36
2021/05/23 07:55 編集
2021/05/23 08:58
2021/05/23 10:13
2021/05/23 10:29
2021/05/23 10:38
2021/05/23 10:42
2021/05/23 11:42 編集
2021/05/23 11:59
2021/05/23 12:01
2021/05/23 12:09
2021/05/24 02:58