@re_masaki (masa yan)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Rails】form_withを使用し検索機能を実装中ですが、検索後にページの遷移が行われません、、、知恵を貸してください。

【解決したいこと】
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

No Answers yet.

Your answer might help someone💌