前提・実現したいこと
Railsでネットのコードを参考にしながら検索機能を作っています。
まず検索に一致したユーザーとそのリンクを表示し、リンクを押してユーザーの今までの投稿一覧を表示できるようにしたいのですが、エラーが発生しています。
発生している問題・エラーメッセージ
TypeError in SearchsController#search
no implicit conversion of nil into String
該当のソースコード
route.rb
Rails.application.routes.draw do devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations', } # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root 'homes#top' get 'mypage', to: 'homes#mypage' resources :posts, only: [:create, :new, :edit, :update, :destroy] get '/posts/index', to:'posts#index' get '/search', to: 'searchs#search' get '/userpage', to: 'searchs#search' resources :posts, except: [:index] do resource :bookmarks, only: [:create, :destroy] end end
searchs_controller.rb
class SearchsController < ApplicationController def search @content = params["content"] @users = User.where('name LIKE ?', '%'+@content+'%') @posts = Post.where('body LIKE ?', '%'+@content+'%') end private def search_for(model, content, method) if model == 'user' if method == 'perfect' User.where(name: content) else User.where('name LIKE ?', '%'+content+'%') end elsif model == 'post' if method == 'perfect' Post.where(body: content) else Post.where('body LIKE ?', '%'+content+'%') end end end end
search.html.erb
<% if @users.present? && @posts.present? %> <h3>【Users,Postsモデルの検索結果】検索ワード:<%= @content %></h3> <h4>・ユーザー名</h4> <%= render 'posts/users', users: @users %> <h4>・投稿内容</h4> <%= render 'posts/search_index', posts: @posts %> <% elsif @users.present? && @posts.empty? %> <h3>【Usersモデルの検索結果】検索ワード:<%= @content %></h3> <h4>・ユーザー名</h4> <%= render 'posts/users', users: @users %> <% elsif @users.empty? && @posts.present? %> <h3>【Postsモデルの検索結果】検索ワード:<%= @content %></h3> <h4>・投稿内容</h4> <%= render 'posts/search_index', posts: @posts %> <% else %> <h3>検索ワード:<%= @content %>に該当はありません</h3> <% end %> ``` _users.html.erb ``` <% users.each do |user| %> <%= link_to userpage_path(user) do %> <%= user.name %><br> <% end %> <% end %> ``` _userpage.html.erb ``` <table> <thead> <tr> <th>投稿者名</th> <th>本文</th> <th></th> <th></th> </tr> </thead> <tbody id="user"> <% @posts.each do |post| %> <tr> <td><%= post.user.name %></td> <td><%= post.body %></td> <% if post.user == current_user %> <td><%= link_to "編集", edit_post_path(post) %></td> <td><%= link_to "削除", post_path(post), method: :delete, remote: true %></td> <% else %> <td></td> <td></td> <% end %> </tr> <% end %> </tbody> </table> ``` _form.html.erb ``` <% if user_signed_in? %> <%= form_tag(search_path, method: :get) do %> <%= text_field_tag 'content' %> <%= submit_tag '検索' %> <% end %> <% end %> ``` エラーメッセージ Parameters: {"format"=>"2"} ### 試したこと @users = User.where('name LIKE ?', '%'+@content+'%') に問題がありそうなので、.to_s、||=を追加してみましたがうまく行きませんでした。 ### 補足情報(FW/ツールのバージョンなど) ruby 2.5.9 rails 6.1.4.1 mysql 5.6.35(MAMP 4.2.0)
回答1件
あなたの回答
tips
プレビュー