1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsの入力フォームのバリデーション作成方法

Last updated at Posted at 2023-09-07

モデルの作成

まず、メールアドレスを保存するためのモデルを作成します。例として、Userモデルを作成するとします。

rails generate model User email:string

データベースのマイグレーション

次に、データベースにモデルの変更を反映させるためのマイグレーションを行います。

rails db:migrate

コントローラーの作成

Userモデルにデータを保存するためのコントローラーを作成します。例として、Usersコントローラーを作成するとします。

rails generate controller Users

ビューの作成

入力フォームを表示するビューファイルを作成します。app/views/users ディレクトリに、例として new.html.erb ファイルを作成します。

<!-- app/views/users/new.html.erb -->
<h1>New User</h1>

<%= form_with(model: @user) do |form| %>
  <div class="field">
    <%= form.label :email %>
    <%= form.text_field :email %>
  </div>

  <%= form.submit "Create User" %>
<% end %>

コントローラーの設定

Usersコントローラーに、新しいユーザーを作成するアクションと、Userオブジェクトを作成するためのストロングパラメーターを設定します。

# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to root_path, notice: 'User was successfully created.'
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:email)
  end
end

以上で、メールアドレスの入力フォームの作成が完了しました。ユーザーが新しいメールアドレスを入力して送信すると、createアクションが呼び出され、Userオブジェクトが作成されます

メールアドレスの入力フォームでメールアドレスしか入力できないようにするには、バリデーションを使用します。

# app/models/user.rb
class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
end

・presence: true は、メールアドレスが空でないことを確認します。
・uniqueness: true は、他のユーザーとメールアドレスが重複していないことを確認します。
・format: { with: URI::MailTo::EMAIL_REGEXP } は、メールアドレスが正しい形式であることを確認します。Railsでは、標準で URI::MailTo::EMAIL_REGEXP を使用してメールアドレスの形式をチェックできます。

入力フォームのエラー表示を追加すると何が問題か分かりやすくなります。

<!-- app/views/users/new.html.erb -->
<h1>New User</h1>

<%= form_with(model: @user) do |form| %>
  <div class="field">
    <%= form.label :email %>
    <%= form.text_field :email %>
    <% if @user.errors.any? %>
      <div class="error">
        <%= @user.errors[:email].join(', ') %>
      </div>
    <% end %>
  </div>

  <%= form.submit "Create User" %>
<% end %>

上記のコードでは、@user.errorsを使ってエラーメッセージを表示しています。

エラーメッセージの設定は、ロケールファイルを使ってエラーメッセージをカスタマイズする方法があります。
ロケールファイルを使用することで、複数の言語に対応するエラーメッセージを定義できます。
config/localesディレクトリに、対象の言語に対応するロケールファイルを作成します。例えば、日本語のロケールファイルを作成する場合は、ja.ymlという名前のファイルを作成します。

# config/locales/ja.yml
ja:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              blank: "メールアドレスを入力してください。"
              taken: "このメールアドレスはすでに使用されています。"
              invalid: "無効なメールアドレス形式です。"

これにより、Userモデルのemail属性に対するエラーメッセージが日本語でカスタマイズされます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?