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で年度取得し、動的に範囲が指定されるようにしてみましょう。
未経験でも、現役エンジニアの手厚い指導が受けられるCodeCampのレッスン【無料カウンセリング】とは? 【CodeCampの無料カウンセリング】で知ることができる内容 自分にあったプログラミング言語とは? 初心者のための挫折しない 学習の進め方
独学よりも速く、確実に プログラミングを習得する方法
満足度97.1%、現役エンジニアのマンツーマンレッスンとは?
CodeCampがプログラミング初心者から選ばれる理由
未経験からエンジニア転職・フリーランスとして活躍するステップ
開催時間:毎日9時〜21時迄(所要時間40分) PCとインターネットがあれば、日本全国どこからでも受講できます
CodeCampで学習できる言語・技術