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

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

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

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

Q&A

解決済

3回答

446閲覧

バリデーションが起動しない

bata1016

総合スコア2

Ruby

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

0グッド

0クリップ

投稿2020/09/25 06:03

バリデーションを設けているが、valid?を行ってもtrueが返ってきてしまう。モデルにはバリデーションを設定しております。おそらく、テーブルでのnullオプションで弾かれて保存されていないようです。ただ、バリデーションはすり抜けられてしまいます。

class DocumentsController < ApplicationController def index @user_name = current_user.name end def new @document = DocumentFolder.new end def create! @document = DocumentFolder.new(document_params) # @folder = Folder.new if @document.valid? @document.save return redirect_to root_path else render "new" end end private def document_params params.require(:document_folder).permit(:document_name, :folder_name, :image).merge(user_id: current_user.id) end end
class DocumentFolder include ActiveModel::Model attr_accessor :document_name, :folder_name, :image, :user_id # バリデーション validates :document_name, presence: true validates :folder_name, presence: true validates :image, presence: true # validates :folder, presence: true # validates :user, presence: true def save @folder = Folder.create(folder_name: folder_name, user_id: @user_id) Document.create(document_name: document_name, image: image, user_id: @user_id, folder_id: @folder.id) end end

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

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

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

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

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

guest

回答3

0

自己解決

form_withへlocal:trueの記述を加えることで反映されることができました。

投稿2020/10/02 10:10

bata1016

総合スコア2

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

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

0

Woah, it is a good thing you know about these things. Just stumbled upon this thread haha.

投稿2020/09/28 04:57

EmmaBabe

総合スコア32

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

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

0

Validationsモジュール がないからかと思いました。

class DocumentFolder include ActiveModel::Model include ActiveModel::Validations

のように include ActiveModel::Validations を追加するといかがでしょうか。

投稿2020/09/25 06:21

hatsu

総合スコア1809

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

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

bata1016

2020/09/25 06:27

ご指摘いただいた通り追記しましたがダメなようでした。
hatsu

2020/09/25 06:40

ちなみにvalid?する際の @document に入っている値はわかりますでしょうか? 本来どこで弾かれるのかを確認したく。
bata1016

2020/09/25 06:44

少し長いですが下記の通りとなっております。 [6] pry(#<DocumentsController>)> @document => #<DocumentFolder:0x00007fcb0879ef70 @document_name="test", @errors=#<ActiveModel::Errors:0x00007fcb0879e890 @base=#<DocumentFolder:0x00007fcb0879ef70 ...>, @details={}, @messages={}>, @folder_name="test", @image= #<ActionDispatch::Http::UploadedFile:0x00007fcb09977b70 @content_type="application/pdf", @headers= "Content-Disposition: form-data; name=\"document_folder[image]\"; filename=\"\xE3\x83\x86\xE3\x83\x83\xE3\x82\xAF\xE3\x82\xAD\xE3\x83\xA3\xE3\x83\xB3\xE3\x83\x95\xE3\x82\x9A \xE3\x82\xA8\xE3\x83\xB3\xE3\x82\xB7\xE3\x82\x99\xE3\x83\x8B\xE3\x82\xA2\xE8\xBB\xA2\xE8\x81\xB7 \xE5\xAD\xA6\xE7\xBF\x92\xE3\x81\xAB\xE9\x96\xA2\xE3\x81\x99\xE3\x82\x8B\xE8\xAB\xB8\xE6\xB3\xA8\xE6\x84\x8F_200703.pdf\"\r\nContent-Type: application/pdf\r\n", @original_filename="sample_200703.pdf", @tempfile=#<File:/var/folders/n2/shxvv46j38s2mtrpy4r8qffc0000gn/T/RackMultipart20200925-4270-9eqprm.pdf>>, @user_id=1, @validation_context=nil>
hatsu

2020/09/25 06:50

@document_name="test", @folder_name="test", @image= #<ActionDispatch::Http::UploadedFile:0x00007fcb09977b70 があるってことはpresence: trueのバリデーションにはひっかからないのは適切のように思いました。 エラー内容はわかりますでしょうか。 @document.errors.full_messagesとかでエラー内容がわかるかもです
bata1016

2020/09/25 06:56

pry(#<DocumentsController>)> @document.errors.full_messages => [] 上記のようになり、エラーそのものが発生していないようです、、、
hatsu

2020/09/25 06:57

> テーブルでのnullオプションで弾かれて保存されていないようです。 ちなみにこの保存されていないのは、どのカラムが弾かれていますでしょうか。
bata1016

2020/09/25 07:07

載せているコードのdocument_name,folder_name,imageカラムのことです。 念のためsaveの中身を確認してみました。 @document.save (0.3ms) BEGIN ↳ app/forms/document_folder.rb:16:in `save' Folder Exists? (0.4ms) SELECT 1 AS one FROM `folders` WHERE `folders`.`folder_name` = BINARY 'test' LIMIT 1 ↳ app/forms/document_folder.rb:16:in `save' User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/forms/document_folder.rb:16:in `save' (0.2ms) ROLLBACK ↳ app/forms/document_folder.rb:16:in `save' (0.2ms) BEGIN ↳ app/forms/document_folder.rb:17:in `save' User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/forms/document_folder.rb:17:in `save' (0.2ms) ROLLBACK ↳ app/forms/document_folder.rb:17:in `save' => #<Document:0x00007fcb0867c160 id: nil, document_name: "test", folder_id: nil, user_id: 1, created_at: nil, updated_at: nil>
hatsu

2020/09/25 10:53

>nullオプションで弾かれて保存されていない このようなエラーメッセージが見当たらないのと、insertのようなデータを作ろうとしているログがなさそうですね。 原因を分けたいので、Saveのなかを@folder = Folder.create(folder_name: folder_name, user_id: @user_id) だけにしたときは実行できますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問