railsで投稿できないのを対処しました

![スクリーンショット 2021-02-26 21.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998838/70ab7832-9b2d-72a2-fed1-63d875e4c752.png)
#構築環境
macOS Big sur
ruby 2.6.5
rails 6.0.0

#何があったのか
最初は、![スクリーンショット 2021-02-26 21.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998838/f0750470-1b56-9f45-f7d5-a059fd4ff57a.png)
こんな感じで、paramsが入っていないっていうエラー。しかしcontrollerを見てみてもおかしいところはなさそう
しかし、おかしいところを見つけましたね。
controllの記述を間違えてしまいました。

↓こちらは修正前の、投稿に関するcontroller

```posts_controller.rb
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: []) 
      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

```

修正後↓

```
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: []) 
      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

```
２０行目の、
`@post = Post.create.params.require(:post).permit(:content, images: [])`
の部分を、
`@post = Post.create params.require(:post).permit(:content, images: []) `に変えました。
上の間違った文章だと、Postのcreateメソドッドのparamsを撮ってこいってなってしまうので、そりゃあparamsなんてないよって上のエラーの画像みたいに怒られるでしょうね。
しかし、したのようにしたことで、`Post.create`と、paramsのストラロングパラメーターの部分と分離するという本来伝えたかった意味になるので、通ったわけです。

もうひとつやったことがありました。

```
class Post < ApplicationRecord
    has_many_attached :images
    belongs_to :user, optional: true
end

```

modelの部分のアソシエーションは、userと結びつけていますなので、userと投稿であるpostは、1対多になります
↓が、userに関するmodelです。deviceを使っているので、それに関する記述がありますがここでは説明しないので気にしないでください

```
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
end

```
`has_many :posts`としているので、userは、一人でもたくさんの投稿ができるようになっています。

下が

```post.rb
class Post < ApplicationRecord
    has_many_attached :images
    belongs_to :user, optional: true
end
```

`optional: true`をuserにつけることで、親クラス(user)の外部キーのnilを許可するようにすることで、投稿機能の中にある`save`メソッドをきのうさせることができました。