画像は、お問い合わせのフォームを開いた状態。
はじめから「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
ご教授のほど、よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。