データベースを使わないモデルを使ったRailsアプリの作成

Rails でアプリを作るときに、データベース(以下 DB)を使用しないでモデルを扱いたい場合があると思います。

例えば、簡単なゲームとか入力した結果が帰って来るだけのシンプルなアプリとか。

そんなアプリやサイトを作る際に、モデルが使えたら form_for とか使えたりするので便利かなと思います。

今回は、入力した値を別画面で表示するアプリを作成します。

下準備

Rails new で新しいアプリを作ります。

generate コマンド等でコントローラーとビューを作っておきます。

1. model の作成

app > models の中に新しくモデルファイルを作成します。
今回は「home.rb」という名前のファイルを作成しました。

class Home
include ActiveModel::Model
#要素を定義します
attr_accessor :name, :name2
#バリデーションの定義
validates :name, presence: true
validates :name2, presence: true
end

2行目の include ActiveModel::Model によってDBがない状態でのモデルの使用が可能になるみたいです。

2. 入力画面の作成

app/views/[コントローラー名] の中にとりあえず 「new.html.erb」 というファイルを作成し、以下のように記述します。

<%= form_for @home, url: '/home/result' do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :name2 %>
<%= f.text_field :name2 %>
<%= f.submit %>
<% end %>

出ました form_for !!!

3. コントローラーの編集

今回は new で入力画面を、result で結果画面を出す方法をとります。

class HomeController < ApplicationController
def new
@home = Home.new
end

def result
home = params[:home].permit(:name, :name2)
@home = Home.new(home)
end
end

new では実際には作成しないのですが、@home に Home.new しておかないと何も入ってないと怒られます。

4. ルーティング

config/routes.rb に以下を追加します。

root 'home#new'
get '/home', to: 'home#new'
post '/home/result', to: 'home#result'

5. 結果画面の作成

app/views/[コントローラー名] の中にとりあえず 「result.html.erb」を作成して、以下のように記述します。

<%= @home.name %>, <%= @home.name2 %>

6. 完成!

rails s コマンドでサーバーを起動して、0.0.0.0:3000にアクセスするともう入力フォームがあると思いますので、入力してチェックしてみてうまくいけば成功です。

後記

form_for を使ってサクッと入力画面が作れるのでいいなと思います。