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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

2回答

930閲覧

Couldn't find Photo without an IDについて

gen515

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/04/20 20:04

###前提・実現したい事
ruby on railsでコメント機能を実装して、コメント投稿ページを作成したいのですがエラーが出ます。

###発生している問題・エラーメッセージ

ActiveRecord::RecordNotFound (Couldn't find Photo without an ID): app/controllers/answers_controller.rb:5:in `new'

イメージ説明

###該当のソースコード
answers_controller.rb

rails

1class AnswersController < ApplicationController 2 3 def new 4 @answer =Answer.new 5 @photo = Photo.find(params[:photo_id]) 6 end 7 8 9 def create 10 @answer = current_user.answers.new(answer_params) 11 if @answer.save 12 redirect_back(fallback_location: root_path) 13 else 14 redirect_back(fallback_location: root_path) 15 end 16 end 17 18 private 19 20 def answer_params 21 params.require(:answer).permit(:content, :photo_id) 22 end 23end 24

answers/new.html.erb

rails

1<%= image_tag @photo.image.url if @photo.image? %> 2

photo.rb

rails

1class Photo < ApplicationRecord 2 mount_uploader :image, ImageUploader 3 4 validates :user_id, presence: true 5 validates :content, presence: true 6 validates :image, presence: true 7 8 belongs_to :user 9 has_many :answers, dependent: :destroy 10 11end 12

answer.rb

rails

1class Answer < ApplicationRecord 2 belongs_to :user 3 belongs_to :photo 4end 5

routes.rb

rails

1Rails.application.routes.draw do 2 resources :photos 3 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 4 root to: 'toppages#index' 5 6 get 'login', to: 'sessions#new' 7 post 'login', to: 'sessions#create' 8 delete 'logout', to: 'sessions#destroy' 9 10 get 'signup', to: 'users#new' 11 resources :photos do 12 resources :answers, only: [:create, :new] 13 end 14 resources :users, only: [:index, :show, :create] 15 resources :photos 16 resources :answers, only: [:create, :new] 17end 18

###試した事
ルーティングのネストの影響だと思い、answersコントローラーの
@photo = Photo.find(params[:id])@photo = Photo.find(params[:photo_id])と変えてみたんですがそれでも改善されませんでした。

###補足
足りないコードがあれば載せます。ご教授お願いします。

ruby 2.5.3
rails 5.2.5

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

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

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

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

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

guest

回答2

0

resources :photos
resources :answers, only: [:create, :new]

後半にあるこの2行を削除してエラーが出たところが間違っているはずです。


ネストしていない

resources :answers, only: [:create, :new]

によって

/answers/newというURLがAnswersController#newに割当られてしまっています

投稿2021/04/21 06:15

asm

総合スコア15147

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

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

0

params[:photo_id] が渡ってきていないのが原因で、それは AnswersControllerに原因があるのではなく、AnswersControllerのnewを呼ぶ方に問題があります。
そのviewを載せてください

投稿2021/04/20 23:23

winterboum

総合スコア23401

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

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

gen515

2021/04/21 00:25

answers.controller.rb <%= image_tag @photo.image.url if @photo.image? %> まだこれしか書いてないです。
winterboum

2021/04/21 01:07

それはnewで呼ばれる方では? newを呼ぶ方です、必要なのは
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問