質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1788閲覧

railsで検索機能をつけたい

nijima

総合スコア27

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/08/05 11:46

ruby on railsを用いて、投稿した本や投稿したユーザーの名前を検索する機能をつくりたいです。
ユーザーの名前検索は機能するのですが、本の名前検索では写真のようなエラーがでました。
searchメソッドは定義したつもりですが、メソッドのエラーがでました。
プログラミング初心者で、このエラーの原因がわかりません。ご指導お願いいたします。

イメージ説明

book.rb class Book < ApplicationRecord belongs_to :user has_many :book_comments, dependent: :destroy has_many :favorites, dependent: :destroy def favorited_by?(user) favorites.where(user_id: user.id).exists? end validates :title, presence: true validates :body, presence: true,length: { maximum: 200 } def self.looks(word, search) if search == "perfect_match" Book.where("title LIKE?", "#{word}") elsif search == "forward_match" Book.where("title LIKE?", "#{word}%") elsif search == "backword_match" Book.where("title LIKE?", "%#{word}") elsif search == "partial_match" Book.where("title LIKE?", "%#{word}%") else Book.all end end end
user.rb class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :books, dependent: :destroy has_many :book_comments, dependent: :destroy has_many :favorites, dependent: :destroy attachment :profile_image has_many :reverse_of_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :followers, through: :reverse_of_relationships, source: :follower has_many :relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :followings, through: :relationships, source: :followed validates :name,length: { minimum: 2, maximum: 20 } ,uniqueness: true validates :introduction,length: { maximum: 50 } def follow(user_id) relationships.create(followed_id: user_id) end def unfollow(user_id) relationships.find_by(followed_id: user_id).destroy end def following?(user) followings.include?(user) end def self.search(search, word) if search == "forward_match" @user = User.where("name LIKE?", "#{word}%") elsif search == "backward_match" @user = User.where("name LIKE?", "%#{word}") elsif search == "perfect_match" @user = User.where("#{word}") elsif search == "partial_match" @user = User.where("name LIKE?", "%#{word}%") else @user = User.all end end end
search.html.erb <h2>Books search for '<%= params[:word] %>'</h2> <!--books一覧 --> <table class="table table-hover table-inverse">  <% if @range == '2' %> <thead> <tr> <th></th> <th>Title</th> <th>Opinion</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @book.each do |book| %> <tr> <td> <%= link_to(book.user) do %> <% end %> </td> <td> <%= link_to book.title, book, class: "book_#{book.id}" %> </td> <td><%= book.body %></td> </tr> <% end %> </tbody> <% else %> <thead> <tr> <th>image</th> <th>name</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @user.each do |user| %> <tr> <td><%= user.name%></td> <td><%= link_to "Show", user, class: "user_#{user.id}" %></td> </tr> <% end %> </tbody> <% end %> </table>
searches_controller.rb class SearchesController < ApplicationController before_action :authenticate_user! def search @range = params[:range] search = params[:search] word = params[:word] if @range == '1' @user = User.search(search, word) else @book = Book.search(search, word) end end end
application.html.erb <!DOCTYPE html> <html> <head> <title>Bookers2</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <meta name="viewport" content="width=device-width,initial-scale=1"> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <header> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <div class="container"> <a class="navbar-brand" href="/"><span>Bookers</span></a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav ml-auto"> <% if user_signed_in? %> <li> <%= link_to user_path(current_user) do %> <i class="fas fa-home nav-link text-light"> Home</i> <% end %> </li> <li> <%= link_to users_path do %> <i class="fas fa-users nav-link text-light"> Users</i> <% end %> </li> <li> <%= link_to books_path do %> <i class="fas fa-book-open nav-link text-light"> Books</i> <% end %> </li> <li> <%= link_to destroy_user_session_path, method: :delete do %> <i class="fas fa-sign-out-alt nav-link text-light"> logout</i> <% end %> </li> <% else %> <li> <%= link_to root_path do %> <i class="fas fa-home nav-link text-light"> Home</i> <% end %> </li> <li> <%= link_to home_about_path do %> <i class="fas fa-link nav-link text-light"> About</i> <% end %> </li> <li> <%= link_to new_user_registration_path do %> <i class="fas fa-user-plus nav-link text-light"> sign up</i> <% end %> </li> <li> <%= link_to new_user_session_path do %> <i class="fas fa-sign-in-alt nav-link text-light"> login</i> <% end %> </li> <% end %> </ul> </div> </div> </nav> </header> <% if flash[:notice] %> <p id="notice"><%= flash[:notice] %></p> <% end %> <% if user_signed_in? %> <%= form_tag(search_path, method: :get) do %> <%= text_field_tag (:word) %> <%= select_tag 'range', options_for_select([["User", "1"], ["Book", "2"]]) %> <%= select_tag 'search', options_for_select([["前方一致","forward_match"], ["後方一致", "backward_match"],["完全一致", "parfect_match"], ["部分一致", "partial_match"]]) %> <%= submit_tag :search %> <% end %> <% end %> <%= yield %> <footer> <div class="container mt-5"> <div class="row"> <div class ="mx-auto">CopyRight Infratop.inc</div> </div> </div> </footer> </body> </html>
routes.rb Rails.application.routes.draw do devise_for :users root to: 'homes#top' get 'search' => 'searches#search' get "home/about" => "homes#about" resources :books, only: [:edit, :create, :index, :show, :destroy, :update] do resource :favorites, only: [:create, :destroy] resources :book_comments, only: [:create, :destroy] end resources :users, only: [:show, :edit, :update, :index] do resource :relationships, only: [:create, :destroy] get 'followings' => 'relationships#followings', as: 'followings' get 'followers' => 'relationships#followers', as: 'followers' end end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

searchメソッドは定義したつもりですが、メソッドのエラーがでました。

エラーメッセージのとおりです。Book.searchが存在しません。

投稿2021/08/05 13:21

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nijima

2021/08/05 13:35

回答ありがとうございます。 メソッドにsearchをつけ忘れてました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問