

Active Storageを使ってコミュニティサイトを作ろうと考えていますが、投稿をしたあとにページ遷移をすると、  
エラーになってしまいます  
エラーメッセージは以下のとうりです

[code]

    ActionView::Template::Error (undefined method `images' for nil:NilClass):
    
[/code]

# 問題のソースコード

以下、投稿に関するモデル

[code]

    class Post < ApplicationRecord
        has_many_attached :images
        belongs_to :user, optional: true
    end
    
[/code]

以下userのモデルです

[code]

    class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      has_many :posts
      has_one :profile, dependent: :destroy
    
      delegate :name, :leaning_histry, :purpoose, :image, to: :profile
    end
    
[/code]

## ここからコントローラーを載せていきます

以下、投稿に関するコントローラー

[code]

    class PostsController < ApplicationController
      before_action :authenticate_user!
      before_action :find_post, only: [:edit, :update, :show, :destroy]
    
        def index
            @posts = Post.all
          end
    
          def new
          @post = Post.new
        end
    
        def edit
          @post = Post.find(post_params)
        end
    
        def create
          return redirect_to new_profile_path,alert: "プロフィールを登録してください" if current_user.profile.blank?
          @post = current_user
          @post = Post.create params.require(:post).permit(:content, images: []) 
          binding.pry
          if @post.save
            redirect_to root_path,notice:'投稿に成功しました'
            else
              render :new
            end
          end
    
          def update
            if @post.update(post_params)
              redirect_to root_path
            else
              render :edit
            end
          end
    
          def destroy
            if @post.destroy
              redirect_to root_path,alert: '投稿を削除しました'
            else
              redirect_to root_path
            end
          end
    
          private
            def post_params
              params.require(:post).permit(:content, images: [])
            end
    
            def find_post
              @post = Post.find(params[:id])
            end
    
            def force_redirect_unless_my_post
              return redirect_to root_path,alert:'権限がありません'if @post.user != current_user
            end
    end
    
[/code]

こちらが新規投稿ページです

[code]

    <div class ='post-content'>
       <%= form_with model: @post, local: true  do |f| %>
        <%= f.text_area :content, :placeholder => "いまどんなカンジ？"%>
        <%= f.file_fifffeld :images, direct_upload: true, multiple: true %>
        <div class = 'submit-block'>
           <%= f.submit '投稿する', class:"button"%>
        </div>
       <% end %>
    </div>
    
[/code]

こちらが、投稿一覧を表示するページです

[code]

    <div class="content-wrapper">
        <div class="content-block">
            <% @posts.each do |post| %>
            <div class="content">
             <div class="user-about">
             <div class="image">
                 <%= image_tag 'user.JPG'%>
             </div>
             <div class="profile">
                <div class="name-history">
                    <div class="name">
                        taka
                    </div>
                    <div class="mania-histry">
                        マニア歴：1年
                    </div>
                 </div>
    
                 <div class="enjoy-point">
                     楽しいポイント: 自分の手で作ったものが動く様子が楽しい
                 </div>
             </div>
           </div>
    
             <div class="text">
                 <p><% post.content %></p>
             </div>
    
             <% if @post.images.attached? %>
             <div class = 'images'>
             <% @post.images.each do |image| %>
             <%= image_tag image %> <br>
             </div>
             <% end %>
             <% end %>
    
    
             <div class="action-menu">
                 <div class="like">
    
                 </div>
                 <div class="comment">
    
                 </div>
             </div>
    
            </div>
            <% end %>
        </div>
        <div class="sidebar">
         <div class="box">
    
         </div>
         <div class="box">
    
        </div>
        </div>
    </div>
    
[/code]

## ここから下がモデルの部分です

以下、投稿に関するモデルです

[code]

    class Post < ApplicationRecord
        has_many_attached :images
        belongs_to :user, optional: true
    end
    
[/code]

こちらが、userのモデルです

[code]

    class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      has_many :posts
      has_one :profile, dependent: :destroy
    
      delegate :name, :mania_histry, :enjoy_point, :image, to: :profile
    end
    
[/code]

# やってみたこと

rails
cでpost.allとやって投稿をconsole上で取り出してみようと思い、取り出してみたのですが、画像が、出て来なかったので、おそらくDB上に保存されていないのだと思います。

もう一つが、  
Active Storageを実装するにあたってgenereta resourceを実行すると調べたところ下記の記事には書いてありました。

[【Rails 5.2】 Active
Storageの使い方](https://qiita.com/hmmrjn/items/7cc5e5348755c517458a)

その時僕は、そのコマンドを実行していませんでした、  
それが原因なのかなと思っているんですけど、解決の糸口は見つけられていないです。

`rails c`で`post.all`とやって投稿をコンソール上で取り出してみようと思い、取り出してみたのですが、画像は出て来ませんでした。


CC BY-SA 4.0
2021-03-03T01:33:27.413
74380
2022-09-17T12:00:25.093
2021-03-12T15:55:32.280
3060
40506
question
ruby-on-rails ruby
Active Storag を使って画像を投稿できるようにしたいのですが、投稿一覧ページに遷移すると、undefined method `images' for nil:NilClassとなってしまう


Yusuke Sangenya さんにご指摘いただいた通り、`f.file_fifffeld` となっていた誤字を修正した後、`<%
@post.images.each do |image| %>`の部分と`<% @post.images.each do |image|
%>`にある@postの部分をpostに修正したら無事解決しました。  
ありがとうございました。


CC BY-SA 4.0
2021-03-26T09:38:20.577
74904
2021-03-26T09:47:12.720
2021-03-26T09:47:12.720
3060
40506
74380
answer