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

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

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

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

Q&A

0回答

1110閲覧

投稿画像がデータベースに保存されない。

ItiroWakuda

総合スコア9

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/06 23:43

画像投稿アプリ作成のため画像投稿のページを作成し、画像の投稿ボタンを押したところ以下のようなエラーが発生してデータベースに保存されません。

NoMethodError (undefined method `photos' for nil:NilClass):

また、その他のコードは以下の通りです。
micropost.controller

class MicropostsController < ApplicationController before_action :authenticate_user! before_action :correct_user, only: :destroy def new @micropost = Micropost.new @micropost.photos.build end def create @micopost = Micropost.new(micropost_params) if @micropost.photos.present? @micropost.save redirect_to root_path flash[:notice] = "投稿が保存されました" else redirect_to root_path flash[:alert] = "投稿に失敗しました" end end def index @posts = Post.limit(10).order('created_at DESC') end def destroy if @micropost.user == current_user flash[:notice] = '投稿が削除されました' if @micropost.destroy else flash[:alert] = '投稿の削除に失敗しました' end redirect_to root_url end

micropost.rb

class Micropost < ApplicationRecord belongs_to :user has_many :photos, dependent: :destroy validates :user_id, presence: true accepts_nested_attributes_for :photos end

投稿ページのビュー

<%= form_with model: @micropost do |f| %> <%= f.label :comment %> <%= f.text_field :comment %> <%= f.fields_for :photos do |i| %> <%= i.file_field :image %> <% end %> <%= f.submit "投稿", class: "btn btn-primary" %> <% end %>

photo.rb

class Photo < ApplicationRecord belongs_to :micropost validates :image, presence: true mount_uploader :image, ImageUploader end

スキーマファイル

ActiveRecord::Schema.define(version: 20200406211708) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "microposts", force: :cascade do |t| t.text "comment" t.bigint "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["user_id", "created_at"], name: "index_microposts_on_user_id_and_created_at" t.index ["user_id"], name: "index_microposts_on_user_id" end create_table "photos", force: :cascade do |t| t.string "image" t.bigint "micropost_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["micropost_id"], name: "index_photos_on_micropost_id" end

nilクラスに定義されていないメソッドphotosを使用したことによるエラーであることから、@micropostがnilであるから発生したのかなと思い、micropostコントローラのcreateメソッドのif文の前にbiding.pryを置いて@micropostを調べたところnilでした。
またmicropost_paramsには値が入ってました。
@micropostがnilであるため発生しているのではと考えておりますが、具体的にどこのコードが影響しているのかわからない状態です。
分かる方はお手数ですが教えてください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問