データベースを使わないモデルを使った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 を使ってサクッと入力画面が作れるのでいいなと思います。