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

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

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

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

Ruby

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

Q&A

解決済

1回答

1443閲覧

User must exist User can't be blankのエラーメッセージが出る

noe.black

総合スコア2

Devise

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

Ruby

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

0グッド

0クリップ

投稿2021/01/18 02:37

前提・実現したいこと

初めての投稿です。
devise、cancancan、rails_adminのgemを利用して、管理者を作り、管理者のみがユーザーに紐づいたカルテを作成できるように実装しようとしています。

現在カルテを投稿しようとしたところ、User must exist User can't be blankとのエラーメッセージが発生しており、カルテとユーザー情報が紐づいていない状況です。

一人では解決できないと思い、相談させていただきます。お力を貸していただければありがたいです。

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

User must exist User can't be blank https://gyazo.com/8d19000391b26ce67eb987932dce421b

該当のソースコード

ruby

1users_controller.rb 2 3class UsersController < ApplicationController 4 def show 5 @user = User.find(params[:id]) 6 end 7end

ruby

1karutes_controller.rb 2 3class KarutesController < ApplicationController 4 def index 5 @users = User.where.not(id: current_user.id) 6 end 7 8 def new 9 @karute = Karute.new 10 11 end 12 13 def create 14 @karute = Karute.new(karute_params) 15 @karute.user_id = @user_id 16 if @karute.save 17 redirect_to root_path 18 else 19 render :new 20 end 21 end 22 23 def show 24 unless @karute.present? 25 render :new 26 else 27 @karute = Karute.find(params[:id]) 28 @karute = Karute.new 29 end 30 end 31 32 private 33 34 def karute_params 35 params.require(:karute).permit(:pain, :illness, :history, :medicine, :habit, :memo, :date) 36 end 37end

ruby

1user.rb 2 3class User < ApplicationRecord 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :validatable 8 9 with_options presence: true do 10 validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,100}+\z/i } 11 validates :family_name, format: { with: /\A[ぁ-んァ-ン一-龥]/ } 12 validates :first_name, format: { with: /\A[ぁ-んァ-ン一-龥]/ } 13 validates :family_name_kana, format: { with: /\A[ァ-ヶー-]+\z/ } 14 validates :first_name_kana, format: { with: /\A[ァ-ヶー-]+\z/ } 15 validates :birth_date_id 16 validates :phone_number, format: { with: /\A\d{11}\z/ } 17 end 18 has_one :address 19 has_one :karute 20end

ruby

1karute.rb 2 3class Karute < ApplicationRecord 4 belongs_to :user 5 6 validates :user_id,{presence: true} 7end

ruby

1new.html.erb 2 3<h2 class="karute-title">カルテ入力</h2> 4 5<%= form_with model: @karute, url: user_karutes_path, local: true do |f| %> 6<%= render 'shared/error_messages', model: f.object %> 7 8 <div class="field"> 9 <%= f.label "作成日" %><br /> 10 <%= f.text_field :date %> 11 </div> 12 13 <div class="field"> 14 <%= f.label "痛みのある部位" %><br /> 15 <%= f.text_field :pain %> 16 </div> 17 18 <div class="field"> 19 <%= f.label "既往症" %><br /> 20 <%= f.text_field :illness %> 21 </div> 22 23 <div class="field"> 24 <%= f.label "通院歴" %><br /> 25 <%= f.text_field :history %> 26 </div> 27 28 <div class="field"> 29 <%= f.label "服用薬" %><br /> 30 <%= f.text_field :medicine %> 31 </div> 32 33 <div class="field"> 34 <%= f.label "日常的に行っている行動" %><br /> 35 <%= f.text_field :habit %> 36 </div> 37 38 <div class="field"> 39 <%= f.label "メモ" %><br /> 40 <%= f.text_field :memo %> 41 </div> 42 43 <div class="actions"> 44 <%= f.submit "カルテ作成", class: :form__btn %> 45 </div> 46 47<% end %>

ruby

1routes.rb 2 3Rails.application.routes.draw do 4 mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 5 devise_for :users, controllers: { 6 registrations: 'users/registrations' 7 } 8 devise_scope :user do 9 get 'addresses', to: 'users/registrations#new_address' 10 post 'addresses', to: 'users/registrations#create_address' 11 end 12 root to: "karutes#index" 13 resources :users, only: [:show] do 14 resources :karutes, only: [:index, :new, :create, :show] 15 end 16end

試したこと

createの後ろにbinding.pryを置いて見てparamsを確認したところ

ruby

1 11: def create 2 12: @karute = Karute.new(karute_params) 3 13: @karute.user_id = @user_id 4 => 14: binding.pry 5 15: if @karute.save 6 16: redirect_to root_path 7 17: else 8 18: render :new 9 19: end 10 20: end 11 12[1] pry(#<KarutesController>)> params 13=> <ActionController::Parameters {"authenticity_token"=>"H15JMHapc0laGB2qc+AD864K1oDZdFKrJGFp3HqC2Srl4xiiz+LSKKwdmDPpDYXysrDE3N7SQuZWMe8DGk2WWg==", "karute"=><ActionController::Parameters {"date"=>"2021.1.16", "pain"=>"腰", "illness"=>"ヘルニア", "history"=>"", "medicine"=>"", "habit"=>"", "memo"=>""} permitted: false>, "commit"=>"カルテ作成", "controller"=>"karutes", "action"=>"create", "user_id"=>"6"} permitted: false> 14[2] pry(#<KarutesController>)> params.permit 15Unpermitted parameters: :authenticity_token, :karute, :commit, :user_id 16=> <ActionController::Parameters {} permitted: true> 17[3] pry(#<KarutesController>)> @karute 18=> #<Karute:0x00007fac57d822b8 19 id: nil, 20 pain: "腰", 21 illness: "ヘルニア", 22 history: "", 23 medicine: "", 24 habit: "", 25 memo: "", 26 date: Sat, 16 Jan 2021, 27 user_id: nil, 28 created_at: nil, 29 updated_at: nil>

のようにuser_idが結びついていません。
また自身で
User must exist
User can't be blank
について調べたところ
user.rbにbelongs_to :user , optional: trueをつけると、belongs_toの外部キーのnilを許可するとして、保存はできるとありましたが、use_idが保存できない状態でしたのでやめました。
paramsにはuser_idが含まれいているように見えますが、結びついていない状況に自分自身が理解できていない状況です。

ご指摘いただけると嬉しいです。

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

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

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

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

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

guest

回答1

0

自己解決

karutes_controller.rb def create @karute = Karute.new(karute_params) @karute.user_id = @user_id←(ここを修正) if @karute.save redirect_to root_path else render :new end end
修正後 def create @karute = Karute.new(karute_params) @karute.user_id = params[:user_id] if @karute.save redirect_to root_path else render :new end end

にしたところuser_idが保存されました。

投稿2021/01/18 04:15

noe.black

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問