お世話になっております。
現在、railsでインスタグラムクローンアプリを開発しており、投稿内容(contentカラム)を検索し結果を表示するコードを書いているのですが、検索結果を表示できず、詰まっております。
_search.html.erbファイル8行目の後に<% binding.pry %>を挟んでデバックしたところ、@postsには正常に検索結果が入っておりました。
何卒、よろしくお願いいたします。
_search.html.erb <% binding.pry %>あり
<p>検索</p> <%= form_tag(search_path,:method => 'get') do %> <%= text_field_tag :search %> <%= submit_tag 'Search', :content => nil %> <% end %> <% if @posts.present? %> <% @posts.each do |post| %> <% binding.pry %> <%= post.content %> <% end %> <% end %>
<% binding.pry %>ありで実行したログ
[1] pry(#<#<Class:0x00007f9ce619fed0>>)> @posts => [#<Micropost:0x00007f9ce61b45d8 id: 11, content: "u", user_id: 1, created_at: Sat, 12 Sep 2020 13:57:33 UTC +00:00, updated_at: Sat, 12 Sep 2020 13:57:33 UTC +00:00>, #<Micropost:0x00007f9ce61b44e8 id: 10, content: "u", user_id: 1, created_at: Sat, 12 Sep 2020 13:21:09 UTC +00:00, updated_at: Sat, 12 Sep 2020 13:21:09 UTC +00:00>]
MicropostsController
class MicropostsController < ApplicationController before_action :authenticate_user!, only: [:create, :destroy] before_action :correct_user, only: :destroy def create @micropost = current_user.microposts.build(micropost_params) @micropost.image.attach(params[:micropost][:image]) if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) render 'pages/top' end end def destroy @micropost.destroy flash[:success] = "Micropost deleted" redirect_to request.referrer || root_url end def search #Viewのformで取得したパラメータをモデルに渡す @posts = Micropost.search(params[:search]) render 'pages/top' #binding.pry end private def micropost_params params.require(:micropost).permit(:content, :image) end def correct_user @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to root_url if @micropost.nil? end end
micropost.rb
class Micropost < ApplicationRecord #mount_uploader :image, ImageUploader belongs_to :user has_one_attached :image default_scope -> { order(created_at: :desc) } validates :user_id, presence: true validates :content, presence: true, length: { maximum: 140 } validates :image, content_type: { in: %w[image/jpeg image/gif image/png], message: "must be a valid image format" }, size: { less_than: 5.megabytes, message: "should be less than 5MB" } # 表示用のリサイズ済み画像を返す def display_image image.variant(resize_to_limit: [500, 500]) end def self.search(search) return Micropost.all unless search Micropost.where(['content LIKE ?', "%#{search}%"]) end end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/13 09:04
2020/11/19 22:59