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

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

ただいまの
回答率

90.48%

  • Ruby on Rails

    7514questions

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

ActiveRecord::RecordNotFound in TopController#entryのエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 397
退会済みユーザー

退会済みユーザー

ActiveRecord::RecordNotFound in TopController#entry
Couldn't find Product with 'id'=
とエラーが出ました。

top_controller.rbには

class TopController < ApplicationController

  def entry
    @product = Product.find(params[:id])
  end

  def post
    Review.create(nickname:current_user.nickname, product_id:params[:id], rate:create_params[:rate], review:create_params[:review])
      redirect_to action: :index
  end

end

と記載し、
modelsのproduct.rbには

class Product < ActiveRecord::Base
 has_many :reviews    
end

と記載し、
routes.rbには

TechReviewSite::Application.routes.draw do

  root 'products#index'
  get '/product/:id'        =>   'products#show'
  get '/search/'             =>   'top#search'
  get'/entry/:id'            =>   'top#entry'
  post'/entry/:product_id'   =>   'top#post'
  get '/product/:id/reviews/new' => 'reviews#new'
  get 'products/search' => 'top#entry'

  end


と記載しました。

idが空、という事ですが、データベースにはすでにidが入っており、なぜnil
と表示されるのかわかりません。
マイグレーションでカラムの追加をしたほうがよいのでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

@product = Product.find(params[:id])

params[:id]が「nil」とか「""」になってませんか?
findメソッドはid しか指定できないしレコード取得に失敗すると例外が発生します。
もしparamsに空またはnilが入る可能性があるのなら find_byメソッドを使ってはいかがでしょうか?

find_byメソッドはrails4から追加されたメソッドですが、データが存在し無かった場合nilを返してくれます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    railsでルートを消したい

    お世話になります。 現在、ruby on railsを勉強中なのですが、 ralesでコントローラを作成した際のルートを消したいです。 経緯: rails g contoro

  • 解決済

    activerecord-import(multi-level)の使い方

    activerecord-import(multi-level)の使い方で悩んでいます。 実験用のコードを書いてみましたが、思うようにデータベースが更新されません。 コードの書

  • 解決済

    ログインの失敗

    railsでログイン画面を作りました。 しかし、ログインするとホーム画面に戻ってしまい(localhost:3000)ログインできません。 これはルートの設定が間違っているとい

  • 解決済

    Reviewを投稿できない

    レストランクチコミサイトを作ろうとしています。 レストランページからReviewを投稿できるようにしたいのですが undefined local variable or met

  • 解決済

    name spaceを使ったrootのパスが表示されない

    以下の通り、管理者画面のTopページを別レイアウトにする為に、name spaceを使用してroutesを設定しています。name space内の他のrouteは想定通りにpath

  • 解決済

    Rubyでクラスとインスタンスを用いてコードを書き換えたいです。

    学校の課題で、クラスとインスタンスを使って現在のコードを書き換えたいのですが、途中まで考えてわからなかったので教えてほしいです。 def post_review(a_post

  • 解決済

    【rails】投稿者のIPアドレスを取得したいです。

    rails初心者です。 現在練習で簡単な掲示板を製作しています。 投稿者のIPアドレスを取得したいのですが、今風のおすすめの方法など教えて頂きたいです。 ======

  • 解決済

    Railsの非同期通信でいいね機能が反映されるようにしたい

    ●実現したいこと 現在、ユーザーの作品を投稿できるInstagramのようなサイトを作成しています。 その中で、作品に「いいね」が押せるように機能を追加しようとしているので

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

  • Ruby on Rails

    7514questions

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