rails初心者です
deviseで先生のログイン機能を作り、先生の詳細情報を編集できるようにresourceで作りました。
コントローラーで情報を送信できるようにしたところ、エラー文が出ることはなかったのですが、
データベースに保存されているのはサインイン時のメールアドレスとパスワードのみで、それ以外の情報はデータに入っていませんでした。
deviseとresourceの名前を同じteacherで統一してしまい、頭が混乱しています。
アドバイスいただけると幸いです。
routes.rb
devise_for :teachers resources :teachers
rake routes以下
Prefix Verb URI Pattern Controller#Action 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
class TeachersController < ApplicationController def index end def create @teacher = Teacher.new(teacher_params) @teacher.save redirect_to edit_teacher_path #DBにデータが入らん 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
その他 teacher.rb
追記
teacher/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>
application.html.erb ここから編集に飛べるようにしています
<li><a href="/teachers/new">基本情報の編集</a></a></li>
application.controller.rb
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:teacher, keys: [:img,:firstname,:lastname,:university,:sex,:wage,:trialwage,:prefecture,:region,:trial,:online,:profile,:message]) end end
今回どうしてデータが登録されなかったのかを知るためには、実際に入力に使ったフォームのviewファイルも掲載する必要がありそうです。
deviseとresourceの名前については、動作させる上では問題ありません。
共同開発者だったとしたら同じ名前にしないように要望しますが、単独開発であれば周りに迷惑をかけることもないので構わないと思います。
ちなみにですが、
deviseがデフォルトで生成しない情報をDBに登録したい場合は、以下の記事のような手順が参考になると思います。
[初めてのdevise ② -- カラムを追加してみる -- ~ やってみようカスマイズ! ~](https://qiita.com/uloruson/items/40154b4be19d1ac900f3)
ご指摘ありがとうございます!ただいま、情報を追記したので、見ていただけると嬉しいです。
一見して怪しいところを見つけることができませんでした。
コチラの記事で紹介されているgemを使っておかしなところを探っていくのがよさそうに感じました。
https://qiita.com/ryosuketter/items/da3a38d0d41c7e20a2d6
ブレークポイントをrubyコードの中に仕込むことができるgemですので、どの時点で処理がおかしくなっているのかを見つけやすくなります。
ありがとうございます。結局、deviseは便利な一方でカスタマイズすることが難しく、一から作り直してうまくいきました!
回答1件
あなたの回答
tips
プレビュー