モデルの作成
まず、メールアドレスを保存するためのモデルを作成します。例として、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属性に対するエラーメッセージが日本語でカスタマイズされます。