前提・実現したいこと
rails初学者です。
railsでtodoアプリを作成しているのですが、データが保存できず困っています。
todo(日程、カテゴリー、内容)を入力し追加ボタンを押すと以下のエラーが発生します。
発生している問題・エラーメッセージ
エラーメッセージ NoMethodError in TasksController#create undefined method `write_from_user' for nil:NilClass
該当のソースコード
tasks_conttroller.rb
class TasksController < ApplicationController def index @task = Task.new @tasks = Task.all.order(id: "DESC") end def create @task = Task.new (task_params) @task.save redirect_to tasks_path end private def task_params params.require(:task).permit(:date, :tag, :text).merge(user_id: current_user.id) end end
main_todo.html.haml
.todo-main .todo-main__form = form_for @task do |f| .todo-main__from__sort__box .todo-main__from__sort__box__title = f.label :date, "日程" = f.datetime_field :date .todo-main__from__sort__box__title = f.label :tag, "カテゴリー" = f.select :tag, Task.tags.keys,{prompt: '選択してください'} .todo-main__from__sort__box__title = f.label :text, "内容" = f.text_field :text, placeholder: " ここにTO DO内容を入力してね!(20文字以内)",class:"todo-main__from__sort__box__title__textform" .todo-main__from__sort__box__title__submit-btn = f.submit 'TODOを追加する', class:'submit-btn'
task.rb
class Task < ApplicationRecord include ActiveModel::Model belongs_to :user enum tag:{"テスト1": 1,"テスト2": 2,"テスト3": 3,"テスト4": 4,"テスト5": 5,"テスト6": 6,} validates :date,:text,:tag, presence: true end
ルーティング
Rails.application.routes.draw do devise_for :users root "tasks#index" resources :tasks, only: [:index, :create, :update] end
試したこと
エラー文の内容から@taskの中身が空の為、起きたエラーなのかと思ったため
binding.pryで内容を確認したろころ
paramsには
"task"=>{"date"=>"2020-05-20T00:00", "tag"=>"テスト1", "text"=>"aaa"}
とデータが入っていましたが
@taskは
id: nil, date: nil, tag: nil, text: nil, user_id: nil, created_at: nil, updated_at: nil
と中身がnilになっていました。
paramsには値が入っているのに@taskに入っておらず・・
ここからどのように対処したら良いか分からずこちらに質問させていただきました。
あなたの回答
tips
プレビュー