作って学ぶRuby on Rails Vol.14 CRUDを学ぼう!その2

      2016/03/22

Code部

Modelを利用したCRUD( Create編 )

Modelを利用して、ユーザー情報の登録を行います。

app/controllers/users_controller.rbのnewというActionに下記を記述して下さい。

@user = User.new
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は考慮しません。

Ruby_on_Rails_crud2-1

<%= form_for @user do |f| %>
   
<% end %>

 

これでユーザー登録用のフォームを作成する準備が整いました。

※ブロックの引数をfとしているのは、formの頭文字をとってfとしています。実際はどんな名前でも構いません。

 

 

続いて、入力フォームを作成していきます。下の表はUserというModelに属するカラムに対する、入力フォームメソッドになります。

 

UserというModelに属するカラムに対する、入力フォームメソッド

カラム名

メソッド

内容

name text_field 名前は文字列型なのでテキストフィールドを用意する
gender select 性別は選択形式で表示する
birthday date_select 日付選択形式で表示する
hometown text_field 出身地は文字列型なのでテキストフィールドを用意する

 

remarks text_area ひとことは、不定長文字列型なので、大きめのテキストフィールドを用意する

上の表に合わせて、ユーザー登録フォームを作り込んでいくのですが、genderの項目では男女を選択させたいので、UserというModelに対して下記の記述を行わなければなりません。

app/models/user.rb を開き、下記の1行をクラス内に追記して下さい。

enum gender: { unknown: 0, male: 1, female: 2, other: 9 }

Ruby on RailsのModelにおけるenumとは列挙型を表しており、keyとvalueに分けられたデータを列挙することができます。つまり、genderに対して、unknown、male、female、otherという4つのkeyとそれに対するvalueを指定しています。

Ruby_on_Rails_crud2-2


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の部分はそれぞれの環境により異なります。

Ruby_on_Rails_crud2-3

 

セレクトボックスを選択すると、

Ruby_on_Rails_crud2-4

上の図のように、enumで定義したkeyが表示されていることが確認できます。

 

 

 Try  selectタグで選択可能な年度の範囲を動的にしよう

 

app/views/users/new.html.erbで記述したf.selectのend_yearをRubyで年度取得し、動的に範囲が指定されるようにしてみましょう。

 

 

NEXT LESSON ☛ CRUDを学ぼう!その3

PREV LESSON ☛ CRUDを学ぼう!その1

目次 - Ruby & Ruby on Rails テキスト目次 –

 

 

 

 - Ruby on Rails, プログラミング, プログラミング基礎