0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

railsでparams.require(モデル)を指定したときにparam is missing or the value is empty:エラーが発生する

Posted at

Webアプリケーションを初めて作成していたときに困ったエラーでparamsから受け取ったデータを保存するときにparamsの値が存在しないとエラーが出て困ったので、初学者で同じように困る方もいるのではないかと思い、今回の記事を作成しました。

下記のような記述をしていてエラーが出ました。

posts_controller.rb
class PostsController < ApplicationController
  def index
    @posts = Post.all
  end

  def new
    @post = Post.new
  end

  def create
    binding.pry
    Post.create(post_params)
  end

  private
  def post_params
    params.require(:post).permit(:text)
  end

end
new.html.erb
<h1>新規投稿ページ</h1>
<%= form_with url: '/posts',method: :post, local: true do |form| %>
  <%= form.text_field :text %>
  <%= form.submit '投稿する' %>
<% end %>

投稿画面でテキストを投稿すると
param is missing or the value is empty: post
とエラーが発生

問題点
コントローラーで定義した下記のインスタンス変数

posts_controller.rb
def new
 @post = Post.new
end

これがnew.html.erbで受け取れていない

new.html.erb
<%= form_with url: '/posts',method: :post, local: true do |form| %>
  <%= form.text_field :text %>
  <%= form.submit '投稿する' %>
<% end %>

@postを受け取っていないので送信されたparamsの中にpostモデルのインスタンス変数がない

解決策

new.html.erb 改善前
<%= form_with url: '/posts',method: :post, local: true do |form| %>
new.html.erb 改善後
<%= form_with(model: @post, local: true) do |form| %>

model: @post部分でcontrollerのnewアクションで定義したインスタンス変数を受け取り、送信時に@postのモデルインスタンスと紐づけて送信することで
require(:post)に値が入っている状態となる

自分なりに調べたことへの解釈ですが、自分はこれでうまくいきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?