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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

Q&A

解決済

1回答

797閲覧

NameError in MicropostsController#searchを解決したい

haru_ren

総合スコア48

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/12 16:55

お世話になっております。

現在、railsインスタグラムクローンアプリを開発しており、検索機能を実装しようとコードを書いているのですが、下記エラーが解決できず、困っております。uninitialized constantと表示されているのでroutes.rb、Controllerのファイル名、Controllerのクラス名を確認したのですが、間違いははありませんでした。

何卒よろしくお願いいたします。

エラーメッセージ

NameError in MicropostsController#search uninitialized constant MicropostsController::Post Extracted source (around line #25): 23 def search 24 #Viewのformで取得したパラメータをモデルに渡す 25 @posts = Post.search(params[:search]) 26 end 27 28 private

routes.rb

Rails.application.routes.draw do root 'pages#top' get 'search', to: 'microposts#search', as: :search devise_for :users, controllers: { registrations: 'users/registrations', omniauth_callbacks: 'users/omniauth_callbacks', passwords: 'users/passwords'} resources :users do member do get :following, :followers end end resources :users, only: [:show, :index, :destroy] resources :microposts, only: [:create, :destroy] resources :relationships, only: [:create, :destroy] get '/notification', to:'pages#notification' get '/post', to:'pages#post' end

_search.html.erb

<p>検索</p> <%= form_tag(search_path,:method => 'get') do %> <%= text_field_tag :search %> <%= submit_tag 'Search', :content => nil %> <% end %>

microposts_controller.rb

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 = Post.search(params[:search]) 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 Post.all unless search Post.where(['content LIKE ?', "%#{search}%"]) end end

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

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

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

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

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

unhappychoice

2020/09/12 17:09

`Post` というモデルが有るのであれば、掲載をしてください
guest

回答1

0

ベストアンサー

掲載された情報にないので推測ですが Post -> Micropost ではありませんか?

投稿2020/09/12 17:09

unhappychoice

総合スコア1531

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

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

haru_ren

2020/09/13 03:14

ご回答ありがとうございます! Post -> Micropostでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問