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

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

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

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

Q&A

解決済

1回答

476閲覧

deviseでform_forを作ろうとするとエラーが出ます

morimi714

総合スコア24

Ruby on Rails 5

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

1グッド

1クリップ

投稿2019/04/10 04:53

編集2019/04/10 11:06

deviseでteacherモデルを作った後、編集画面をform_forで作ろうとするとエラーが出ます。
お力を貸していただけると嬉しいです。

app/views/devise/registrations/edit.html.erb

ruby

1<%= form_for @teacher do |f| %>

error

1undefined method `teacher_path' for #<#<Class:0x00007f1309d03c70>:0x00007f131400c868> 2Did you mean? teachers_new_path

一応調べてみたところ、他の人の解決方法で次のようにどこに飛ばせば良いのかかけば良いとありますが、
この仕組み(:urlからの記述の意味)がよくわかっておりません><
(以下の記述は私が作るものとは無関係のものです)

<%= form_for @profile,:url => {:action => :update} do |p| %> <p>学校名</p> <%= p.text_field :school %> <p>学年</p> <%= p.text_field :grade %> <p>学部</p> <%= p.text_field :department %> <%= p.submit %> <% end %>

お力を貸していただけると嬉しいです

追記

Prefix Verb URI Pattern Controller#Action teachers_new GET /teachers/new(.:format) teachers#new 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 new_student_session GET /students/sign_in(.:format) devise/sessions#new student_session POST /students/sign_in(.:format) devise/sessions#create destroy_student_session DELETE /students/sign_out(.:format) devise/sessions#destroy new_student_password GET /students/password/new(.:format) devise/passwords#new edit_student_password GET /students/password/edit(.:format) devise/passwords#edit student_password PATCH /students/password(.:format) devise/passwords#update PUT /students/password(.:format) devise/passwords#update POST /students/password(.:format) devise/passwords#create cancel_student_registration GET /students/cancel(.:format) devise/registrations#cancel new_student_registration GET /students/sign_up(.:format) devise/registrations#new edit_student_registration GET /students/edit(.:format) devise/registrations#edit student_registration PATCH /students(.:format) devise/registrations#update PUT /students(.:format) devise/registrations#update DELETE /students(.:format) devise/registrations#destroy POST /students(.:format) devise/registrations#create home_top GET /home/top(.:format) home#top root GET / home#top

ruby

1class TeachersController < ApplicationController 2 def new 3 @teacher = Teacher.new 4 end 5 def create 6 @teacher = Teacher.new(teacher_params) 7 @teacher.save 8 redirect_to teachers_path #リダイレクト先はご自由に設定しましょう。 9 end 10 11 def edit 12 @teacher = Teacher.find(id: params[:id]) 13 @teacher.save 14 redirect_to teachers_path 15 end 16 17end

ruby

1Rails.application.routes.draw do 2 get 'teachers/new' 3 devise_for :teachers 4 resources :teachers 5 devise_for :students 6 get 'home/top' 7 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.htm 8 root to: "home#top" 9
ruby_math👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答失礼いたします。

undefined method `teacher_path'
とErrorが出ていますね。

値を渡したいパスはどこでしょうか?
rails routesの結果を公開されていはいかがでしょうか?

追記:コントローラーも必要ですね。お願い致します。

==========以下追記==========

まず1つ目、コントローラーに
create actionの設定がありません。

ruby

1 def create 2 @teacher = Teacher.new(teacher_params) 3 @teacher.save 4 redirect_to teachers_path #リダイレクト先はご自由に設定しましょう。 5 end 6 7 # for security from here 8 private 9 10 def teacher_params 11 params[:teacher].permit(:school, :school, :department) 12 end

つぎに、ルーティングが少しおかしいと感じました。
よくわからないのであれば「resources」を利用しましょう。

ruby

1Rails.application.routes.draw do 2 resources :teachers 3end

そして最後の部分 viewですね。
resourcesを利用し、routesに単数のteacherにcreateアクションが追加してあれば
基本的にurlの指定は必要ありません。
一つすごく気になることがあります。
@profileはどこで定義しているのでしょうか?

もしかして生徒テーブル、生徒コントローラーなどがあるのでしょうか?

もしあるんだとしたら、urlは下記のように取り除きましょう。
teacherのnewではないことを祈ります。

erb

1<%= form_for @profile do |p| %> 2 <p>学校名</p> 3 <%= p.text_field :school %> 4 <p>学年</p> 5 <%= p.text_field :school %> 6 <p>学部</p> 7 <%= p.text_field :department %> 8 <%= p.submit %> 9<% end %>

わからないことがありましたら、コメントにて遠慮なくどうぞ!

投稿2019/04/10 05:10

編集2019/04/10 10:31
ruby_math

総合スコア90

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

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

morimi714

2019/04/10 10:23

回答ありがとうございます。 form_forの仕組みがいまいちよくわかっておらず、どこに飛ばせば良いのか飛ばしたら何が起こるのかわかっていない状況です>< rake routesとコントローラの表記しました
ruby_math

2019/04/10 10:26

回答を編集しました、確認してみてください。
morimi714

2019/04/10 10:42

回答ありがとうございます。 ルーティングではteacherとstudentでdeviseを使いましたが、resourceで作る必要があるのかわかりません。 仕様としては、teacherがサインイン・ログイン後に自分の情報を編集できるようにしたいです。 また途中検索で出てきた@profile以下の文章は私の作ろうとしているものとは全く関係ありません>< 勘違いさせてしまいました、訂正しておきます
ruby_math

2019/04/10 10:53 編集

resources :teachers についてなのですが、勘違いされているようですが ルーティングの設定を自動で行ってくれるようなものです。 routes.rbに記載します。 resourcesで記載していただいたら、teacherがサインイン・ログイン後に情報の編集は可能です。 @profileに関しては回答を編集した後、読み込んでみたら私も気づきました、すみません。 流れを記載します。 1.まずモデルを作成します。 2.rails db:migrateでデータベースを作ります。 3.controllerを作成し必要なアクションを追加します。例 new edit show create destroy update等 3-1.controllerに値を格納するためにストロングパラメータを記述します。 4.viewを作ります。今回の場合newのviewにform_forを用いて作成します。 5.動きます。 このような流れになっていますが、morimori714様が行ってないことはあるでしょうか?
ruby_math

2019/04/10 11:07

やりたいことがわかりました、少し待ってください。 こちらでも同様の環境を作成します。
morimi714

2019/04/10 11:08

回答ありがとうございます!確認してみたところ、1,2のみできています。3はまだ編集中で、 resoureces :teachers を作ってみました!ルーティングの記述が変わっているのでみていただけるとありがたいです!
ruby_math

2019/04/10 11:21

deviseにてteachersモデルを作成したのですね。 私が行ったことを記載します。 1.rails new teacher (アプリケーションの新規作成) 2.gemfileにgem 'devise' を記述 3.bundle installを実行 4.rails g devise:installでdevise環境を構築 5.rails g devise teacherでteacher関連のMVCを作成 6.rails g devise:controllers teachersでteacher_controller.rbを作成 7.rails g devise:views teachersでdeviseで利用するteacher関連のviewを作成 8.rails sにてローカルサーバーの起動 9.http://localhost:3000/teachers/sign_upに移動 10.新規登録完了 となりました、deviseという素晴らしき便利なgemを利用しているのであれば 新規登録をわざわざ自分で作る必要はありませんね! 度々なる勘違い、申し訳ありませんでした。
ruby_math

2019/04/10 11:24

すみません、編集の部分がまだでしたね。 作成してみます。
morimi714

2019/04/10 11:36

今回はform_forに関する質問でしたが、何度もやり取りさせていただき本当に助かりました。resourceを使ったことでform_forのエラーが消えてうまくいったので本当に感謝しております。ありがとうございました!
ruby_math

2019/04/10 11:45 編集

コメントを見逃しておりました、Errorの解決ができてよかったです! 私も理解力をつけようと思った次第であります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問