画像投稿アプリ作成のため画像投稿のページを作成し、画像の投稿ボタンを押したところ以下のようなエラーが発生してデータベースに保存されません。
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であるため発生しているのではと考えておりますが、具体的にどこのコードが影響しているのかわからない状態です。
分かる方はお手数ですが教えてください。
あなたの回答
tips
プレビュー