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

2016年2月13日 (2017年2月27日最終更新)
作って学ぶRuby on Rails Vol.14 CRUDを学ぼう!その2
目次
  1. Modelを利用したCRUD(Create編)

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は考慮しません。

Ruby_on_Rails_crud2-1


<%= 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を指定しています。

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*Try*** selectタグで選択可能な年度の範囲を動的にしよう**app/views/users/new.html.erbで記述したf.selectのend_yearをRubyで年度取得し、動的に範囲が指定されるようにしてみましょう。

NEXTLESSONCRUDを学ぼう!その3CRUDを学ぼう!その3

PREVLESSONCRUDを学ぼう!その1CRUDを学ぼう!その1

目次-Ruby&RubyonRailsテキスト目次目次-Ruby&RubyonRailsテキスト目次

Code部編集チーム
Code部編集チーム
Code部は、日本初のオンラインマンツーマンプログラミングスクール「CodeCamp」が運営するメディアです。「全ての人にプログラミングを」というミッションの下、プログラミング初心者に役立つ情報を発信しています。

関連記事