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

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

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

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

Ruby on Rails

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

解決済

NameError in MicropostsController#searchを解決したい

haru_ren
haru_ren

総合スコア0

Devise

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

Ruby on Rails

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

1回答

0評価

0クリップ

23閲覧

投稿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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

unhappychoice
unhappychoice

2020/09/12 17:09

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Devise

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

Ruby on Rails

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