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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

2回答

1274閲覧

【rails】バリデーションが機能しません

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/06/01 09:14

編集2020/06/01 23:15

前提・実現したいこと

Ruby on railsで投稿機能を実装したいです。

発生している問題

バリデーションで空白を禁止にしているが空白でもバリデーションが機能してくれない。
すべて空欄でsubmitボタンを押すとcreateメソッドに遷移してしまう。

該当のソースコード

app/views/video/new.html.erb

<p class="tintin">審査後俺が使う。パスワード設定する</p> <% if @video.errors.any? %> <div class="video-error"> <ul> <% @video.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <% @video = Video.new unless @video %> <%= form_for :@video,:url => {controller: "video", action: "create" } do |form| %> <p>video_id(watch?v=の先)</p> <%= form.text_field :video_id %> <p>タイトルを設定しましょう(´・ω・`)</p> <%= form.text_field :title %> <p>説明文を記載しましょう(´・ω・`)</p> <%= form.text_area :setumei %> <p>カテゴリーを選んで下さい</p> <%= form.check_box :kategori ,{ class: "okane" }, "書評要約", "no" %>書評要約 <%= form.check_box :kategori ,{ class: "okane" }, "仕事術", "no" %>仕事術 <%= form.check_box :kategori ,{ class: "okane" }, "ネットビジネス", "no" %>ネットビジネス <%= form.check_box :kategori ,{ class: "okane" }, "マインド・思考法", "no" %>マインド・思考法 <%= form.check_box :kategori ,{ class: "okane" }, "せどり・物販", "no" %>せどり・物販 <%= form.check_box :kategori ,{ class: "okane" }, "副業", "no" %>副業 <%= form.check_box :kategori ,{ class: "okane" }, "起業", "no" %>起業 <%= form.check_box :kategori ,{ class: "okane" }, "投資", "no" %>投資 <%= form.check_box :kategori ,{ class: "okane" }, "プログラミング", "no" %>プログラミング <%= form.check_box :kategori ,{ class: "okane" }, "プログラミング以外のテクノロジー", "no" %>プログラミング以外のテクノロジー <%= form.check_box :kategori ,{ class: "okane" }, "外国語", "no" %>外国語 <%= form.submit "コンテンツを作成!", class: "koji" %> <% end %> <script type="text/javascript"> $("p").css("color", "red"); (function($){ $('input[class="okane"]').change(function() { var len = $('input[class="okane"]:checked').length; if (len >= 3) { $('input[class="okane"]').not(':checked').attr('disabled', 'disabled'); } else { $('input[class="okane"]').not(':checked').removeAttr('disabled'); } }); })(jQuery); </script>

app/models/video.rb

class Video < ApplicationRecord validates :video_id, presence: true, uniqueness: true, length: { in: 7..15 } validates :title, presence: true, length: { in: 5..20 } validates :setumei, presence: true, length: { maximum: 5000 } end

補足情報

Windows 10 home 64ビット
ruby 2.6.6
Ruby on rails 6.0.3.1
PostgreSQL 13beta1
テキストエディタ Atom

追記

app/controllers/video_controller.rb

def new @video = Video.new # unless current_user # redirect_to("/") # flash[:alert] = "ログインしている方のみ投稿できます。" end end def create @video = Video.new(video_id: params[:video_id],title: params[:title],setumei: params[:setumei],kategori: params[:kategori]) if @video.save flash[:notice] = "コンテンツの作成が完了しますた!(´ . .̫ . `)" redirect_to("/") else flash[:alert] = "コンテンツ作成失敗" render :new end end

newアクションが投稿申請用でcreateでsaveしていますがバリデーションが機能しない現状です。

失礼な点があるかもしれませんがどうぞ宜しくおねがい致します。

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

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

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

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

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

guest

回答2

0

createに行くのは正常です。
そこでsaveとかvalid?を実行するときにvalidationが行われます。

投稿2020/06/01 13:20

winterboum

総合スコア23567

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

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

退会済みユーザー

退会済みユーザー

2020/06/01 23:16

追記に記入しましたがcreateアクションでsaveを実行しているつもりなのですがvalidationが行われません。
退会済みユーザー

退会済みユーザー

2020/06/02 00:55

endを1つ消し忘れていました。
guest

0

ベストアンサー

def new @video = Video.new # unless current_user # redirect_to("/") # flash[:alert] = "ログインしている方のみ投稿できます。" end end def create @video = Video.new(video_id: params[:video_id],title: params[:title],setumei: params[:setumei],kategori: params[:kategori]) if @video.save flash[:notice] = "コンテンツの作成が完了しますた!(´ . .̫ . `)" redirect_to("/") else flash[:alert] = "コンテンツ作成失敗" render :new end end

上のdef new以降のendを1つ削除したら解決しました!

unlessのendを消し忘れていたようです。
お騒がせしてすみませんでした('◇')ゞ

投稿2020/06/02 00:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問