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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

2271閲覧

Rails formの入力エラー

miyuki651020

総合スコア13

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/03/27 10:34

エラーがはじめから出ている。

画像は、お問い合わせのフォームを開いた状態。
はじめから「3errors入力内容にエラーがあります」が出ています。

原因: まず文字数が規定数に満たなかった場合入力エラーを出す設定をしたつもりでしたが、未記入のままSENTしても送れた。 => controllerとmodel、viewをいじった。 => エラー文が出っぱなしになった。

とにかく未記入の場合エラーが出る実装がしたいです。

index.html.erb

<%= form_for @contact, :url => contact_create_path do |f| %> <div class="page-header"> <h3>メッセージを送る</h3> <% if @contact.errors.any? %> <div class="alert alert-danger" role="alert"> <h4><%= pluralize(@contact.errors.count, "error") %>入力内容にエラーがあります</h4> <ul> <% @contact.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <table class="table"> <tr> <td><%= f.text_field :name, placeholder: 'お名前(必須)', class: 'name', autofocus: true %></td> </tr> <tr> <td><%= f.email_field :email, placeholder: 'メールアドレス(必須)', class: 'email' %></td> </tr> <tr> <td><%= f.text_area :text, placeholder: 'よかったら、メッセージをお願いします!', rows: '10', class: 'text' %></td> </tr> </table> <div class="submit"> <%= f.submit 'SENT', class: 'submit-button' %> </div> <% end %>

contact.rb

class Contact include ActiveModel::Model attr_accessor :name, :email, :text validates :name, length: { minimum: 1, too_short: 'お名前を入力してください。'} validates :email, :length => { minimum: 1, too_short: 'メールアドレスを入力してください。'} validates :text, :length => { minimum: 1, too_short: 'メッセージを入力してください。'} end

contact_controller.rb

class ContactController < ApplicationController def index @contact = Contact.new if @contact.invalid? render :action => 'index' end end def create @contact = Contact.new(contact_params) @mail = ContactMailer. received_email(@contact).deliver else render :action => 'create' end end private def contact_params params.require(:contact).permit(:name, :email, :text) end

ご教授のほど、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

とにかく未記入の場合エラーが出る実装がしたいです。

うまくいっていると思いますけどね。作成したてのContactに対して
@contact.invalid?でvalidationをかけて
もちろん作成時のContactは何のデータも持ってないので
エラーメッセージが入ると。。。

うん、とにかく未記入の場合エラーが出るその通りの実装だと思います。

まあ、意地悪はこれぐらいにして

ruby

1if @contact.invalid? 2 render :action => 'index' 3end

を消せば問題なく動くんじゃないかな(rails4以上)

しかしですね、とりあえずRailsチュートリアルを読みましたか?
多少知識があってっも、Rails(レール)に乗らなきゃ苦労するだけですよ。

たとえ、めんどくさがって、これを読まなくても
せっかくのRailsなので最初はscaffoldをしてから
ことを始めてください。
そうしないと、Rails(レールに乗った開発手法)から
脱線します。

今からでもレールに戻ることをお勧めします

一旦appの中身をどっかに移動して
railsのルートフォルダで

rails g scaffold contact email:string name:string text:string
とした後、現在のindex.html.erb
をnew.html.erbにリネームしてviewsに突っ込めば

contacts/new
で上記画面が表示されると思います。
ついでに、
models/contact.rbに
validates :name, length: { minimum: 1, too_short: 'お名前を入力してください。'}
validates :email, :length => { minimum: 1, too_short: 'メールアドレスを入力してください。'}
validates :text, :length => { minimum: 1, too_short: 'メッセージを入力してください。'}
を追記すればちゃんとvalidationも動くと思います。

投稿2017/03/28 02:19

moke

総合スコア2241

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問