form_forを使ってmariadbのテーブルへcreateとnewのpostをするというフォームを作っているのですが、ArgumentErrorエラーがでており解決できません。
試したこと
https://teratail.com/questions/255575を手本にcontrollerの内容を見直す。→とりあえずquestioncontrollerに全通り書いてみるが効果なし。
ArgumentError in Home#indexなので、Homeコントローラのindexメソッドを見直す。→おかしいようには見えない。
そもそもmariadbが起動していないかもしれないので起動し直す。→alreadyでもう起動済み。
予想
おそらくHomeコントローラのindexメソッドに関わっている、deviceで作ったログイン機能と関連しているロジックを追いきれておらず、ページの転移が競合している?orそもそもフォームに入力されるデータを受け取れていない?
知りたいこと
辻褄の合っていない箇所や競合している箇所はどこなのか
以下コード内容です。
ご教授よろしくお願い致します。
エラー内容 ArgumentError in Home#index Showing /Users/suzukikohya/myapp/sambo/app/views/home/userpage.html.erb where line #41 raised: First argument in form cannot contain nil or be empty Extracted source (around line #41): 39 # 問題の作成フォーム 40 <div class="question_create_form"> 41 <%= form_for(@questions, url: home_userpage_path, method: :post) do |f| %> 42 <p> 43 <%= f.label :question_contents, "問題の本文を入力してください" %><br> 44 <%= f.text_area :question_contents %> Rails.root: /Users/suzukikohya/myapp/sambo コード
index.html.erb <!-- body --> <body> <!-- container --> <div class="container"> <div class="navbar"> <div class="navbar-header"> <div class="navbar-button"> <a class="navbar-title" href="/home/index"><h1>家事育児スキル認定アプリ</h1></a> </div> <form action="#" method="post"> <nav class="user-login"> <div class="user-icon" > <img src="img/#" alt="user-icon"> </div> <p>ユーザー名<br> <input type="text" name="user-name"></p> <p>パスワード<br> <input type="text" name="user-password"></p> <input type="checkbox" name="remember-me">Remember me <a href="/forgot-password.html">Forgot Password</a> <p><input type="button" value="Log in" id="login-button"></p> <p><input type="button" value="Sign Up" id="signup-button"></p> </nav> </form> </div> </div> <br> <br> <br> <link_to "ログアウト", destroy_user_session_path, method: delete %> <div class="level-select"> <div class="easy-question"><a href="/views/easy-question.html">初級</a> <p>初めての方はこちら</p> </div> <div class="normal-question"><a href="/views/normal-question.html">中級</a> <p>人生の必須知識を<br> 身に着けましょう </p> </div> <div class="hard-question"><a href="/views/hard-question.html">上級</a> <p>「パートナー」はおまかせあれ</p> </div> </div> </div> <!-- /contaimer --> コード
userpage.html.erb <!-- body --> <!-- Rubyのプログラムを埋め込むために、拡張子は.rbにしなければならない?or部分で埋め込むメソッドを使う? --> <!-- この中身をeasy/normal/hardのクリックで振り分けるrubyプログラムを書く --> <body> <!-- container --> <div class="container"> <div class="user-status"> <%= notice %> <h1>ユーザーページ</h1> <div class="user-icon"> <!-- ログイン中のユーザーのアイコンや情報を表示 --> <img src="img/#" alt="user-icon" id=> # 抜いたもの①戻す </div> # 問題の作成フォーム <div class="question_create_form"> <%= form_for(@questions, url: home_userpage_path, method: :post) do |f| %> <p> <%= f.label :question_contents, "問題の本文を入力してください" %><br> <%= f.text_area :question_contents %> <br> </p> <p> <%= f.label :answer_list, "答えを入力してください" %><br> <%= f.text_area :answer_list %> </p> <%= f.submit "投稿する" %> <% end %> </div> <div class="created-question-list"> <a href="home/created-question-list">作成済み問題一覧はこちら</a> </div> </div> </div> コード
home_controller.rb class HomeController < ApplicationController before_action :authenticate_user!, only: [:show] def index if user_signed_in? render 'home/userpage' else render 'home/index' end end def show if user_signed_in? render 'home/userpage' else render 'home/index' end end def new @user = current_user.id end end コード
questions_conrtoller.rb class QuestionsController < ApplicationController def new @question = Question.new(question_params) # if @post.save # flash[:notice] = "文章を作成しました。" # redirect_to question_create # else # flash[:alert] = "内容に誤りがあります。" # render home/question_create end end def new @questions = Questions.new end def create @questions = Questions.new(questions_params) if @questions.save flash[:notice] = "問題を作成しました!" redirect_to("home/userpage") else flash[:alert] = "作成できませんでした" redirect_to("home/userpage") end end def questions_params params.require(:questions).permit(:content, :id, :level, :answer_list) end # def question_params # params.require(:question).permit(:id, :content) # end def userpage @questions = Questions.new @questions =Questions.all @question = Question.new @question =Question.all end def destroy end end コード
routes.rb devise_for :users root 'home#index' get 'home/index' get 'home/userpage' => 'questions#userpage' post '/home/userpage' => 'questions#create' get '/home/userpage'=> 'questions#create' get 'home/question_top' # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end コード
回答1件
あなたの回答
tips
プレビュー