前提・実現したいこと
Ruby(Ruby on Rails)でブログ投稿アプリ作っています。
実現したいことは検索フォームに、投稿された投稿のテキストの文字を検索欄に入れ検索したら、
該当する投稿のみを表示させるようにしたいです。
投稿の検索機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
NoMethodError in Tweets#index undefined method `each' for Ransack::Search<class: Tweet, base: Grouping <combinator: and>>:Ransack::Search
該当のソースコード
###tweets_controller
def index @tweets = Tweet.all @tweets = Tweet.includes(:user).order("created_at DESC") @tweets = Tweet.search(params[:search]) end
###tweet.rb
class Tweet < ApplicationRecord validates :text, presence: true, unless: :image? belongs_to :user has_many :comments mount_uploader :image, ImageUploader def self.search(search) if search Tweet.where(['text LIKE ?', "%#{search}%"]) else Tweet.all end end end
###index.html.haml
%h1.article-title COLUMN %section.greeting .content-wrapper - @tweets.each do |tweet| .contents %figure = image_tag tweet.image, size: "546x290", alt: "顔写真1" .content %h2 = tweet.title_name %p.tweet-sentence = tweet.text .edit-button %td= link_to '詳細', tweet - if user_signed_in? && current_user.id == tweet.user_id %td= link_to '編集', edit_tweet_path(tweet) %td= link_to '削除', tweet, method: :delete, data: { confirm: 'Are you sure?' } %br/ .back-button = link_to 'New Tweet', new_tweet_path
###application.html.haml
.wrapper %header.header .header-left %h1.grid-6 %a{:href => "/"} MusicBlog = form_tag tweets_path, :method => 'get' do %p = text_field_tag :search, params[:search] = submit_tag "Search", :name => nil
試したこと
tweetモデルにロジックを書き込んだり
tweets_controllerのindexアクションを確認しました。
indexアクションの@tweets = Tweet.search(params[:search])
をコメントアウトしたら
エラーは表示されませんが、投稿記事が検索できない状態です。
下記の記事を参考にし、実装しました。
【開発メモ】Railsアプリに検索機能を実装する方法をわかりやすくまとめてみた。
補足情報(FW/ツールのバージョンなど)
参考にしたサイト⬇︎
【開発メモ】Railsアプリに検索機能を実装する方法をわかりやすくまとめてみた。
Railsのバージョン ➡︎ Rails 6.0.3.2
gem 'ransack'は導入済み。
あなたの回答
tips
プレビュー