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

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

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

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

解決済

rails 複数のコントローラーから一つのモデルを操作する場合

Normin
Normin

総合スコア15

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

2回答

0リアクション

0クリップ

206閲覧

投稿2022/08/30 09:06

編集2022/08/31 04:10

前提

rails初心者です
railsで面接内容をメモするアプリを作成しています。
面接を受ける人のテーブルがあって、そこの内容を受付の人がまず入力し、その後に面接官が追記するようなものを想定しています。

コントローラー
・entrances_controller.rb
・interview_controller.rb
モデル
・applicant.rb

実現したいこと

  • 受付人コントローラー(entrances_controller.rb)で面接を受ける人のレコードをnew,createで作成し、名前や通し番号を入力する。
  • 面接官コントローラー(einterview_controller.rb)で面接を受ける人のレコードをedit,updateで更新し、面接の評価を書く。

railsの同一名を使うという大原則を無視してモデル名と異なるコントローラーを作ってしまった為、話が厄介になっているのだと思います。今は受付人コントローラーと面接官コントローラーのみですが、同じモデルを操作するコントローラーを増やしたいと考えているので、あまり一つのモデルと一つのコントローラーにまとめ、コントローラーにメソッドを大量に盛り込むというのが気が進まないですがその方が楽ですかね。。。?

ここで質問するのが初めてなので足りない情報などがあったらすみません

発生している問題・エラーメッセージ

エラーメッセージ Started PATCH "/interviews/1/interviews/update" for ::1 at 2022-08-31 10:19:40 +0900 Processing by InterviewsController#update as TURBO_STREAM Parameters: {"authenticity_token"=>"[FILTERED]", "applicant"=>{"family_name"=>"hoge", "given_name"=>"huga", "gender"=>"0", "selection_economic"=>"1", "selection_abroad"=>"0", "document_nyukainegai"=>"1", "document_sankousyorui"=>"1", "document_juminhyo"=>"0", "document_shikaku"=>"0", "document_keizai"=>"0", "receptionist"=>"naya"}, "commit"=>"Update 入会希望者", "interview_id"=>"1"} (0.1ms) SELECT sqlite_version(*) ↳ app/controllers/interviews_controller.rb:11:in `update' Completed 404 Not Found in 11ms (ActiveRecord: 0.9ms | Allocations: 2416) ActiveRecord::RecordNotFound (Couldn't find Applicant without an ID): app/controllers/interviews_controller.rb:11:in `update' Started GET "/interviews/1/edit" for ::1 at 2022-08-31 10:19:40 +0900 Processing by InterviewsController#edit as HTML Parameters: {"id"=>"1"} Applicant Load (0.2ms) SELECT "applicants".* FROM "applicants" WHERE "applicants"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/controllers/interviews_controller.rb:7:in `edit' Rendering layout layouts/application.html.slim Rendering interviews/edit.html.slim within layouts/application Rendered interviews/edit.html.slim within layouts/application (Duration: 6.4ms | Allocations: 3717) Rendered layout layouts/application.html.slim (Duration: 31.7ms | Allocations: 20857) Completed 200 OK in 41ms (Views: 33.1ms | ActiveRecord: 0.5ms | Allocations: 25900)

該当のソースコード

routes.rb

ruby

Rails.application.routes.draw do resources :entrances resources :interviews resources :interviews do patch "interviews/update" => "interviews#update", as: :interviews_update end end

interviews/edit.html.slim

slim

= form_with model: @applicant, url:'interviews/update', local: true do |f| .form_group = f.label :family_name = f.text_field :family_name, class: 'form-control', id: 'family_name' = f.label :given_name = f.text_field :given_name, class: 'form-control', id: 'given_name' = f.label :gender, '男性' = f.radio_button :gender, 0 = f.label :gender, '女性' = f.radio_button :gender, 1 br = f.check_box :selection_economic, {}, 1, 0 = f.label :selection_economic br = f.check_box :selection_abroad, {}, 1, 0 = f.label :selection_abroad br br = f.check_box :document_nyukainegai, {}, 1, 0 = f.label :document_nyuryonegai br = f.check_box :document_sankousyorui, {}, 1, 0 = f.label :document_sankousyorui br = f.check_box :document_juminhyo, {}, 1, 0 = f.label :document_juminhyo br = f.check_box :document_shikaku, {}, 1, 0 = f.label :document_gakuseki br = f.check_box :document_keizai, {}, 1, 0 = f.label :document_keizai br = f.label :receptionist = f.text_field :receptionist, class: 'form-control', id: 'receptionist' = f.submit nil, class: 'btn btn-primary' ...

interviews_controller.rb

ruby

class InterviewsController < ApplicationController def index @applicants = Applicant.all end def edit @applicant = Applicant.find(params[:id]) end def update applicant = Applicant.find(params[:id]) applicant.update!(params) end end ...

ruby 3.1.0p0
Rails 7.0.3.1

rails

interviews GET /interviews(.:format) interviews#index POST /interviews(.:format) interviews#create new_interview GET /interviews/new(.:format) interviews#new edit_interview GET /interviews/:id/edit(.:format) interviews#edit interview GET /interviews/:id(.:format) interviews#show PATCH /interviews/:id(.:format) interviews#update PUT /interviews/:id(.:format) interviews#update DELETE /interviews/:id(.:format) interviews#destroy interview_interviews_update PATCH /interviews/:interview_id/interviews/update(.:format) interviews#update GET /interviews(.:format) interviews#index POST /interviews(.:format) interviews#create GET /interviews/new(.:format) interviews#new GET /interviews/:id/edit(.:format) interviews#edit GET /interviews/:id(.:format) interviews#show PATCH /interviews/:id(.:format) interviews#update PUT /interviews/:id(.:format) interviews#update DELETE /interviews/:id(.:format) interviews#destroy

url: interview_interviews_update_path(id: @applicant)の場合

Rendering interviews/edit.html.slim within layouts/application Rendered interviews/edit.html.slim within layouts/application (Duration: 7.4ms | Allocations: 9239) Rendered layout layouts/application.html.slim (Duration: 7.7ms | Allocations: 9333) Completed 500 Internal Server Error in 12ms (ActiveRecord: 0.1ms | Allocations: 10695) ActionView::Template::Error (No route matches {:action=>"update", :controller=>"interviews", :id=>#<Applicant id: 4, family_name: "agf", given_name: "gaff", reception_number: 301, gender: 1, receptionist: "fad", created_at: "2022-08-30 07:21:20.242973000 +0000", updated_at: "2022-08-30 07:21:20.242973000 +0000", selection_economic: 0, selection_abroad: 0, document_nyuryonegai: 0, document_sankousyorui: 0, document_juminhyo: 0, document_gakuseki: 0, document_keizai: 0>}, missing required keys: [:interview_id] Did you mean? interview_interviews_update_url): 4: .nav.justify-contnet-end 5: = link_to '一覧', interviews_path, class: 'nav-link' 6: 7: = form_with model: @applicant, url:interview_interviews_update_path(id: @applicant), local: true do |f| 8: .form_group 9: = f.label :family_name 10: = f.text_field :family_name, class: 'form-control', id: 'family_name' app/views/interviews/edit.html.slim:7

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

winterboum

2022/08/30 09:20

エラーメッセージはそれだけではないと思うので省略せずに全部載せてください

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。