前提・実現したいこと
ruby on railsでブログを投稿できるサイトを制作です。
そこで投稿した記事の内容を検索する機能を実装したいと思っています。
検索フォームの作成の前提として
- form_withを使用している
- railsの基本アクション以外でseachという命名でアクションを定義している
- 検索の条件は記事のテキストを含む投稿にしている
- 検索機能の実装前に簡単なタグ付け機能を実装しています
です。
- 検索フォームは全てのページに表示させたいのでapplication.html.rbに記述しています
- ブートストラップ4を使用しています
プログラミングについての理解がまだ浅く、自分で調べてみたのですが解決に至れませんでした。
初めての質問で至らぬところも多々あると思いますが、どうか力をお貸しください。
発生している問題・エラーメッセージ
検索したい文字を入力して検索ボタンを押しても画面が検索結果のページに遷移しない。
エラーメッセージは表示されません。
該当のソースコード
ルーティング
ruby
1config/routes.rb 2 3Rails.application.routes.draw do 4 devise_for :users 5 root to: 'posts#index' 6 resources :posts do 7 resources :comments, only: :create 8 collection do 9 get 'search' 10 end 11 end 12 resources :users, only: :show 13end
コントローラー
ruby
1 2app/controllers/posts_controller.rb 3 4def search 5 @posts = Post.search(params[:keyword]) 6 7-- ここより下は検索機能の実装時に記述しました -- 8 9 return nil if params[:input] == "" 10 tag = Tag.where(['name LIKE ?', "%#{params[:input]}%"] ) 11 render json:{ keyword: tag } 12 end
モデル
bury
1app/models/post.rb 2 3class Post < ApplicationRecord 4 5 has_many :post_tag_relations 6 has_many :tags, through: :post_tag_relations 7 belongs_to :user 8 has_one_attached :image 9 has_many :comments 10 11 def self.search(search) 12 if search != "" 13 Post.where('text LIKE(?)', "%#{search}%") 14 else 15 Post.all 16 end 17 end 18end
ビュー画面(検索フォーム)
<form class="form-inline my-2 my-lg-0"> <%= form_with(url: search_posts_path, local: true, method: :get) do |form| %> <%= form.text_field :keyword, placeholder: "投稿を検索する", class: "form-control mr-sm-2" %> <%= form.submit "検索", class: "nav-alink btn btn-outline-secondary mr-2" %> <% end %> </form>
ビュー画面(検索結果)
<div class="contents row"> <% @post.each do |post| %> <div class="col-md-4 mt-5"> <div class="card text-center"> <%= image_tag post.image, size: "100x200", class: "card-img-top" %> <h4 class="card-text"><%= post.title %></h4> <p class="card-text text-truncate"><%= post.text %></p> <ul class="tag"> <li class="tag-list"> <% post.tags.each do |tag| %> #<%=tag.name%> <%end%> </li> </ul> <%= link_to "詳細ページへ", post_path(post.id), method: :get, class: "btn btn-outline-secondary btn-block" %> </div> </div> <% end %> </div>
試したこと
Railsアプリに検索機能を実装する方法をわかりやすくまとめてみた。を参考にし、form_withではなくてform_tag を使用してやってみましたがやはり画面の遷移ができませんでした。
URLから直接検索結果の画面に移動すると、投稿した記事の内容が全て文字列として表示されている状態です。
知識不足なので的を外した質問かもしれませんが、前に進めずに困っております。
知恵を貸していただけると本当にありがたいです。
補足情報(FW/ツールのバージョンなど)
ruby_version 2.6.5
Rails 6.0.3.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。