Rails】form_withを使用し検索機能を実装中ですが、検索後にページの遷移が行われません、、、知恵を貸してください。
Q&A
Closed
【解決したいこと】
ruby on railsでブログを投稿できるサイトを制作です。
そこで投稿した記事の内容を検索する機能を実装したいと思っています。
検索フォームの作成の前提は
- form_withを使用している
- railsの基本アクション以外でseachという命名でアクションを定義している
- 検索の条件は記事のテキストを含む投稿にしている
- 検索機能の実装前に簡単なタグ付け機能を実装しています
です。
検索フォームは全てのページに表示させたいのでapplication.html.rbに記述しています
ブートストラップ4を使用しています
プログラミングについての理解がまだ浅く、自分で調べてみたのですが解決に至れませんでした。
初めての質問で至らぬところも多々あると思いますが、どうか力をお貸しください。
発生している問題・エラーメッセージ
検索したい文字を入力して検索ボタンを押すと画面が検索結果のページに遷移するが、DBの中身が全て文字列として表示されてしまう。
エラーメッセージは表示されません。
コード
ルーティング
config/routes.rb
Rails.application.routes.draw do
devise_for :users
root to: 'posts#index'
resources :posts do
resources :comments, only: :create
collection do
get 'search'
end
end
resources :users, only: :show
end
コントローラー
app/controllers/posts_controller.rb
def search
@posts = Post.search(params[:keyword])
-- ここより下は検索機能の実装時に記述しました --
return nil if params[:input] == ""
tag = Tag.where(['name LIKE ?', "%#{params[:input]}%"] )
render json:{ keyword: tag }
end
モデル
app/models/post.rb
class Post < ApplicationRecord
has_many :post_tag_relations
has_many :tags, through: :post_tag_relations
belongs_to :user
has_one_attached :image
has_many :comments
def self.search(search)
if search != ""
Post.where('text LIKE(?)', "%#{search}%")
else
Post.all
end
end
end
ビュー画面(検索フォーム)
<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から直接検索結果の画面に移動すると、投稿した記事の内容が全て文字列として表示されている状態です。
知識不足なので的を外した質問かもしれませんが、前に進めずに困っております。
知恵を貸していただけると本当にありがたいです。
補足情報
ruby_version 2.6.5
Rails 6.0.3.4
0 likes