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

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

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

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

Q&A

解決済

1回答

4266閲覧

form_forで投稿投稿時のUnpermitted parameters: の解決方法

miyamon_ky

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/13 04:14

form_forで投稿するとUnpermitted parameters:が発生し、一部データが保存されません。

DBに情報が保存されません

ご閲覧ありがとうございます。
railsでタスク管理システムを作っています。
タスクを投稿する機能を実装中に以下のエラーが発生しました。
taskカラムに投稿データを保存したいのですが、user_idしか保存されません。

こちらの原因と解決方法を教えていただけたらと思います。
大変お手数をおかけしますがよろしくお願いいたします。

発生している問題・エラーメッセージ

Unpermitted parameters: :utf8, :authenticity_token, :task, :commit

該当のソースコード

tasks/new.html.erb

HTML

1<div class="contents row"> 2 <%= form_for @task, url: "/tasks" do |f| %> 3 <%= f.text_field :task, placeholder: 'タスク'%> 4 5 <%= f.submit "送信" %> 6 <% end %> 7 8 9</div>

routes.rb

ruby

1Rails.application.routes.draw do 2 resources :tasks 3end

tasks_controller

ruby

1 def new 2 @task = Task.new(task: task_params[:task], user_id: current_user.id) 3 end 4 5 def create 6 @task = Task.create(task: task_params[:task], user_id: current_user.id) 7 end 8 9 private 10 def task_params 11 params.permit(:task, :limit_date) 12 end

task.rb

ruby

1class Task < ApplicationRecord 2 belongs_to :user 3end 4

user.rb

ruby

1class User < ApplicationRecord 2 has_many :tasks 3end

create.html.erb

HTML

1<div class="contents row"> 2 <div class="success"> 3 <h3> 4 タスク作成完了しました。 5 </h3> 6 <a class="btn" href="/">投稿一覧へ戻る</a> 7 </div> 8</div> 9

試したこと

はじめはtasks_controllerのcreateメソッド部分を下記としていましたが、DBには何も保存されませんでした。

def create @task = Task.create(task_params) end

そこで下記に変更したところuser_idはDBに保存されるようになりましたが、taskカラムについては保存されないままで、なぜtaskカラムのみ保存されないかは分かりませんでした。
そもそもUnpermitted parameters:のエラーはpermitメソッドをつけると解決される認識でした。

def create   @task = Task.create(task: task_params[:task], user_id: current_user.id) end

大変恐れ入りますがよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

「Unpermitted parameters:のエラーはpermitメソッドをつけると解決される認識でした。」
この認識は合っていますが、permitを正しくかけないとだめです。
permitの引数はparamsの構造にあわせなければなりません。
logを見てください。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"rF...F7Lg==", "task"=>{"task" => "..."}}
となってませんか?

params.require(:task).permit(:task)
としてください

投稿2020/06/13 08:52

winterboum

総合スコア23284

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

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

miyamon_ky

2020/06/14 01:58

winterboumさん ご回答ありがとうございます。 無事解決しました。 requireメソッドの欠落でした。 また、newメソッドの引数にもparamsを使用していたこともミスの一つでした。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問