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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

685閲覧

form_forでデータベースへの保存をしたいのですが、ArgumentErrorが解決できません。

kohya_suzuki

総合スコア24

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2021/07/06 14:01

編集2021/07/07 10:36

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 コード

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

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

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

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

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

winterboum

2021/07/07 04:14

エラーメッセージを載せましょう
kohya_suzuki

2021/07/07 05:11

ご指摘ありがとうございます。。記載いたしました。
pecchan

2021/07/07 10:26

userpage.html.erb の41行目てどの行になりますか?
kohya_suzuki

2021/07/07 10:37

ご指摘ありがとうございます。 修正いたしました。
guest

回答1

0

ベストアンサー

orm_for(@questions, とありますが、この@questionsが action inde で定義されていないのが原因です。

投稿2021/07/07 10:32

winterboum

総合スコア23284

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

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

kohya_suzuki

2021/07/07 11:56

ご回答いただき、ありがとうございます。 @モデルの方か、_pathのurlに問題があるのかの判断もついていませんでした。 home_controller.rbへ def index @questions = Question.new end を追加記述することで解決できました。 なぜ明示していないのにHomeコントローラのindexメソッドがここで呼び出されているのか? homeコントローラにindexメソッドが2つある状態になってしまったが問題ないのか? など疑問が残ってしまいましたが、また調べていきたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問