【ruby】ActiveModelを使ってDBと関係ないFormを作成する【Rails】
RailsでFormを扱う時は、Modelと紐付けることで、validationなどの設定はModelに書くことができ、非常に便利です。
ですが、DBと関係ない場合は紐付ける対象のModelが生成されていません。
そこで使用するのがActiveModelです。
https://github.com/rails/rails/tree/master/activemodel
使い方
使い方は簡単で、既存のModelと同じように扱うことができます。
Modelクラスの作成
まずは、Formのプロパティを持ったModelクラスを作成します。
このクラスはActiveModel::Modelをincludeさせます。
class Hoge include ActiveModel::Model # Formで使用するプロパティを定義する attr_accessor :foo, :bar, :piyo # Validationを定義する validates :foo, presence: true validates :bar, presence: true validates :piyo, presence: true end
Controllerでの処理
Controllerでの処理も同じです。
インスタンスを生成する際に値をセットしてあげて、validationを通すことができます。
@hoge = Hoge.new foo: 'FOO', bar: 'BAR' @hoge.valid? # => false @hoge = Hoge.new foo: 'FOO', bar: 'BAR', piyo: 'PIYO' @hoge.valid? # => true
Viewでの処理
Viewも、Modelをform_forに渡す方法で書くことができます。
<%= form_for @hoge, url: '/hoge_create' do |f| %> <%= f.text_field :foo %> <%= f.text_field :bar %> <%= f.text_field :piyo %> <%= f.submit %> <% end %>
注意点
こんなに簡単に書けるのはRails4だけっぽい...?
下記の記事を読むとRails3の時は結構めんどくさそうな実装をしていました。