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

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

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

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

Q&A

解決済

2回答

443閲覧

form_forで送信したデータが入らない

morimi714

総合スコア24

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/04/18 01:07

rails 初心者です
先生の登録機能を作っているのですが、createアクション後にデータが保存されていません。
データベースはmySQLを使っているのですが、そちらを確認してみたところ、やはり入っていませんでした。
いろいろ調べてみましたが、どこが間違っているか想定できないためお力を貸していただけると嬉しいです。
足りない情報があれば、お申し付けください。

teachers_controller.rb

class TeachersController < ApplicationController def index end def create @teacher = Teacher.new(teacher_params) @teacher.save redirect_to teacher_path end def new @teacher = Teacher.new end def edit @teacher = Teacher.find(params[:id]) end def show @teacher = Teacher.find(params[:id]) end def update @teacher = Teacher.find(params[:id]) @teacher.update(teacher_params) redirect_to teacher_path end #ストロングパラメーターの設定 private def teacher_params params.require(:teacher).permit(:img,:firstname,:lastname,:university,:sex,:wage,:trialwage,:prefecture,:region,:trial,:online,:profile,:message) end end

teachers/new.html.erb

<div class="teacher_information"> <%= form_for(@teacher) do |f| %> <h4>基本情報の編集</h4> <tr> <td>プロフィール画像の設定</td> <td><%= f.file_field :img %></td> </tr> <tr> <td>イニシャル(名前)</td> <td><%= f.text_field :firstname, maxlength:1 %></td> </tr> <tr> <td>イニシャル(名字)</td> <td><%= f.text_field :lastname, maxlength:1 %></td> </tr> <tr> <td>性別</td> <%= f.radio_button :sex, "男性" %> <%= f.label :sex, "男性" %> <%= f.radio_button :sex, "女性" %> <%= f.label :sex, "女性" %> </tr> <tr> <td>大学</td> <td><%= f.text_field :university %></td> </tr> <tr> <td>授業料金</td> <td><%= f.number_field :wage %>円/時間</td> <td><%= f.number_field :trialwage %>円/時間(体験授業)</td> </tr> <tr> <td>指導可能時間</td> <table> <tr> <td>曜日/時間</td> <td>月曜</td> <td>火曜</td> <td>水曜</td> <td>木曜</td> <td>金曜</td> <td>土曜</td> <td>日曜</td> </tr> <tr> <td>午前中</td> <td><%= check_box 'weeks','monday', {}, true, false %></td> <td><%= check_box 'weeks','tuesday', {}, true, false %></td> <td><%= check_box 'weeks','wednesday', {}, true, false %></td> <td><%= check_box 'weeks','thursday', {}, true, false %></td> <td><%= check_box 'weeks','friday', {}, true, false %></td> <td><%= check_box 'weeks','saturday', {}, true, false %></td> <td><%= check_box 'weeks','sunday', {}, true, false %></td> </tr> <tr> <td>13:00~16:00</td> <td><%= check_box 'weeks','monday', {}, true, false %></td> <td><%= check_box 'weeks','tuesday', {}, true, false %></td> <td><%= check_box 'weeks','wednesday', {}, true, false %></td> <td><%= check_box 'weeks','thursday', {}, true, false %></td> <td><%= check_box 'weeks','friday', {}, true, false %></td> <td><%= check_box 'weeks','saturday', {}, true, false %></td> <td><%= check_box 'weeks','sunday', {}, true, false %></td> </tr> <tr> <td>16:00~19:00</td> <td><%= check_box 'weeks','monday', {}, true, false %></td> <td><%= check_box 'weeks','tuesday', {}, true, false %></td> <td><%= check_box 'weeks','wednesday', {}, true, false %></td> <td><%= check_box 'weeks','thursday', {}, true, false %></td> <td><%= check_box 'weeks','friday', {}, true, false %></td> <td><%= check_box 'weeks','saturday', {}, true, false %></td> <td><%= check_box 'weeks','sunday', {}, true, false %></td> </tr> <tr> <td>19:00~22:00</td> <td><%= check_box 'weeks','monday', {}, true, false %></td> <td><%= check_box 'weeks','tuesday', {}, true, false %></td> <td><%= check_box 'weeks','wednesday', {}, true, false %></td> <td><%= check_box 'weeks','thursday', {}, true, false %></td> <td><%= check_box 'weeks','friday', {}, true, false %></td> <td><%= check_box 'weeks','saturday', {}, true, false %></td> <td><%= check_box 'weeks','sunday', {}, true, false %></td> </tr> </table> <tr> <td>都道府県選択</td> <td><%= f.collection_select :prefecture, Prefecture.all, :id, :name %></td> </tr> <tr> <td>授業可能地域</td> <td><%= f.text_field :region %></td> </tr> <tr> <td>体験授業に関して</td> <td><%= f.text_area :trial %></td> </tr> <tr> <td>オンライン授業に関して</td> <td><%= f.text_area :online %></td> </tr> <tr> <td>プロフィール・経歴</td> <td><%= f.text_area :profile %></td> </tr> <tr> <td>メッセージ</td> <td><%= f.text_area :message %></td> </tr> <%= f.submit "保存する" %> <% end %> </div>

rake routes 以下

new_teacher_session GET /teachers/sign_in(.:format) devise/sessions#new teacher_session POST /teachers/sign_in(.:format) devise/sessions#create destroy_teacher_session DELETE /teachers/sign_out(.:format) devise/sessions#destroy new_teacher_password GET /teachers/password/new(.:format) devise/passwords#new edit_teacher_password GET /teachers/password/edit(.:format) devise/passwords#edit teacher_password PATCH /teachers/password(.:format) devise/passwords#update PUT /teachers/password(.:format) devise/passwords#update POST /teachers/password(.:format) devise/passwords#create cancel_teacher_registration GET /teachers/cancel(.:format) devise/registrations#cancel new_teacher_registration GET /teachers/sign_up(.:format) devise/registrations#new edit_teacher_registration GET /teachers/edit(.:format) devise/registrations#edit teacher_registration PATCH /teachers(.:format) devise/registrations#update PUT /teachers(.:format) devise/registrations#update DELETE /teachers(.:format) devise/registrations#destroy POST /teachers(.:format) devise/registrations#create teachers GET /teachers(.:format) teachers#index POST /teachers(.:format) teachers#create new_teacher GET /teachers/new(.:format) teachers#new edit_teacher GET /teachers/:id/edit(.:format) teachers#edit teacher GET /teachers/:id(.:format) teachers#show PATCH /teachers/:id(.:format) teachers#update PUT /teachers/:id(.:format) teachers#update DELETE /teachers/:id(.:format) teachers#destroy

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

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

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

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

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

guest

回答2

0

ベストアンサー

def create @teacher = Teacher.new(teacher_params) @teacher.save redirect_to teacher_path end

この記述ですと、@teacher.saveで保存が成功していなくてもteacher_pathにリダイレクトされるようになってしまいます。
validationを設定していて、そのvalidationが通っていない場合にフォームに戻したい場合,

def create @teacher = Teacher.new(teacher_params) if @techear.save redicect_to techear_path else render :new end end

もしくは

def create @teacher = Teacher.new(teacher_params) if @teacher.valid? ActiveRecord::Base.transaction do @teacher.save! end redirect_to teacher_path else render :new end end

のような記述がいいと思います。
今回の場合は保存が自体が成功していないので、バリデーションの見直しをしてみてはいかがでしょうか?

投稿2019/05/02 13:49

haneru

総合スコア440

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

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

0

直接的な回答でなく申し訳ありませんが、一つずつ切り分けしていくしかないと思います。

PryというGemをインストールすると、Controllerの任意の場所で処理を止めて、その時点におけるインスタンス変数の中身を参照したりすることができますので、それをお勧めします。

https://qiita.com/ryosuketter/items/da3a38d0d41c7e20a2d6

createアクションの@teacher.saveの前にbinding.pryという一文を入れるとそこでストップします。コンソールを開き、@teacher.errors.messagesと実行すると、何らかエラーが出るかもしれません(Modelバリデーションのエラーとか)。切り分け頑張ってみてください。

投稿2019/04/28 10:11

psuke

総合スコア202

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問