ActionMailerのSMTP設定、テンプレートで送信&ActiveModelの基本的な使い方とバリデーション開発現場でちゃんと使えるRails 4入門(10)(2/2 ページ)

» 2014年11月04日 18時00分 公開
[著:林慶、監修:山根剛司株式会社アジャイルウェア]
前のページへ 1|2       

永続化しないデータをActiveModelで扱う

 ここからはActiveModelについて紹介していきます。ActiveModelはDBに保存しないデータ、例えば検索フォームからのクエリなど、一時的に保持するが保存はしないようなデータをActiveRecordのデータのように扱えるようにするライブラリです。

 よく見られるのは永続化しないデータにバリデーションを設定したり、ヘルパーメソッドの「form_for」を使ってフォームを作ったりするシーンで使われます。

ActiveModelの基本的な使い方

 ActiveModelは対象データのクラスでモジュールをインクルードすることで使うことができます。以下のように「ActiveModel::Model」をインクルードし、アクセサー付きの属性を設定すると、ActiveRecordのように初期化できます。

class Query
  include ActiveModel::Model
  attr_accessor :keyword
end
 
query = Query.new(keyword: 'hoge')

ActiveModelのバリデーション

 「ActiveModel::Model」をインクルードすると属性にバリデーションを設定できます。

class Query
  include ActiveModel::Model
  attr_accessor :keyword
 
  validates :keyword, presence: true
end
 
query = Query.new
query.valid? #=> false
 
query.keyword = 'hoge'
query.valid? #=> true

ActiveModelのフォーム

 ActiveModelをヘルパーメソッドの「form_for」で使い方を次に示します。

- @query = Query.new
= form_for @query, url: books_path, method: :get do |f|
  = f.text_field :keyword
  = f.sumit '検索'

 「:url」と「:method」オプションを渡しているのは「@query」のActiveModelオブジェクトを保存するためのルーティングを設定していないからです。ここでは「books_path」への「GET」メソッドで書籍の一覧ページを指定しています。これに対するアクションも見ておきましょう。

def index
  @query = Query.new(params[:query])
  if @query.valid?
    @books = Book.where("title like :keyword OR author like :keyword", keyword: @query.keyword)
  else
    @books = Book.all
  end
 
  flash[:notice] = "現在時刻:#{Time.now}"
end

 ここでは検索フォームの内容をActiveModelオブジェクトとして「@query」に格納し、バリデーションに成功していれば「@query.keyword」で書籍のタイトルと著者で検索するようになっています。

次回は国際化とRailsのセッティング

 今回はActionMailerによるメールの送信機能の作り方とActiveModelによる永続化しないデータの取り扱い方を紹介しました。いずれも実際に使ってみると、より理解が進むことでしょう。筆者が初めてActionMailerを触った時は、アプリケーションのレポートを自分宛てに送る機能を作りました。

 次回は国際化とRailsのセッティングについて解説します。お楽しみに。

著者プロフィール

林 慶(Rails技術者認定シルバー試験問題作成者)

平成2年大阪生まれ。2006年から高専で情報工学を学んでいたが当時は所謂プログラミングができない工学生だった。卒業後、高専の専攻科に上がったもののマンネリ化したキャンパスライフに飽きたため休学して渡豪。そこでプログラミングに対するコンプレックスを克服するためにRuby on Railsなどでアプリケーションを作ることを覚える。

帰国後から現在までは復学し推薦システムに関する研究を行いながら、アジャイルウェアでRuby on Railsアプリケーションの開発業務に従事している。

好きなメソッドはinject。


監修者プロフィール

山根 剛司(Ruby業務開発歴7年)

兵庫県生まれ。1997年からベンチャー系のパッケージベンダーで10年間勤務。当時、使用していた言語はJavaとサーバーサイドJavaScript。

2007年よりITコンサル会社に転職し、Rubyと出会って衝撃を受ける。基幹システムをRuby on Railsで置き換えるプロジェクトに従事。それ以来Ruby一筋で、Ruby on Railsのプラグインやgemも開発。

2013年より、株式会社アジャイルウェアに所属。アジャイルな手法で、Ruby on Railsを使って企業向けシステムを構築する業務に従事。

Ruby関西所属。好きなメソッドはtap。

Twitter:@spring_kuma、Facebook:山根 剛司


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。