- 更新日: 2017年02月27日
- 公開日: 2016年02月13日
作って学ぶRuby on Rails Vol.14 CRUDを学ぼう!その2
Modelを利用したCRUD(Create編)
Modelを利用して、ユーザー情報の登録を行います。
app/controllers/users_controller.rbのnewというActionに下記を記述して下さい。
class UsersController < ApplicationController
# 初期表示
def index
end
# データを閲覧する画面を表示するためのAction
def show
end
# データを作成する画面を表示するためのAction
def new
@user = User.new
end
# データを更新する画面を表示するためのAction
def edit
end
# データを作成するためのAction
def create
end
# データを更新するためのAction
def update
end
# データを削除するためのAction
def destroy
end
end
これは、新しいユーザー登録用の箱を用意した形になります。
Userクラス(Model)を空で生成し、@userというインスタンス変数に格納しています。
続いてapp/views/users/new.html.erbに登録フォームを作成していきます。
登録フォームを作成する場合、htmlのformタグが必要になります。
Ruby on Railsではこのformタグを生成するform_forというメソッドが用意されています。
まずはViewにform_forメソッドを追記していきます。
form_forメソッドは、Controllerで生成したUserというModelの空のインスタンス変数を引数にして呼び出します。
※現時点ではCSSは考慮しません。
<%= form_for @user do |f| %>
<% end %>
これでユーザー登録用のフォームを作成する準備が整いました。
※ブロックの引数をfとしているのは、formの頭文字をとってfとしています。実際はどんな名前でも構いません。
続いて、入力フォームを作成していきます。下の表はUserというModelに属するカラムに対する、入力フォームメソッドになります。
UserというModelに属するカラムに対する、入力フォームメソッド
カラム名メソッド内容
上の表に合わせて、ユーザー登録フォームを作り込んでいくのですが、genderの項目では男女を選択させたいので、UserというModelに対して下記の記述を行わなければなりません。
app/models/user.rbを開き、下記の1行をクラス内に追記して下さい。
RubyonRailsのModelにおけるenumとは列挙型を表しており、keyとvalueに分けられたデータを列挙することができます。つまり、genderに対して、unknown、male、female、otherという4つのkeyとそれに対するvalueを指定しています。
class User < ActiveRecord::Base
enum gender: { unknown: 0, male: 1, female: 2, other: 9 }
end
続いて、app/views/users/new.html.erbを開き、下記のように編集します
<%= form_for @user do |f| %>
<div>
<%= f.text_field :name %>
</div>
<div>
<%= f.select :gender, User.genders.keys %>
</div>
<div>
<%= f.date_select :birthday, start_year: 1950, end_year: 2016 %>
</div>
<div>
<%= f.text_field :hometown %>
</div>
<div>
<%= f.text_area :remarks %>
</div>
<% end %>
divで各フォームを分けているのは改行を意図しています。
selectタグを生成するメソッドの引数としてUser.genders.keysを指定していますが、これはUserクラス(Model)で定義されているgenderというenumのkeyを表しています。
Modelに定義されたenumを使用する場合は、カラム名であるgenderを複数形にしたgendersで利用することができます。
また、start_yearとend_yearをしている箇所については、selectタグで選択可能な年度の範囲を指定しています。start_yearからend_yearまでの年度が選択可能となります。
一度ブラウザで確認してみましょう。
https://xxxxxx.c9users.io/users/users/new
※xxxxxの部分はそれぞれの環境により異なります。
セレクトボックスを選択すると、
上の図のように、enumで定義したkeyが表示されていることが確認できます。
Try*Try*** selectタグで選択可能な年度の範囲を動的にしよう**app/views/users/new.html.erbで記述したf.selectのend_yearをRubyで年度取得し、動的に範囲が指定されるようにしてみましょう。
NEXTLESSONCRUDを学ぼう!その3CRUDを学ぼう!その3
PREVLESSONCRUDを学ぼう!その1CRUDを学ぼう!その1
目次-Ruby&RubyonRailsテキスト目次目次-Ruby&RubyonRailsテキスト目次
- この記事を書いた人
- CodeCampus編集部