ActionMailerのSMTP設定、テンプレートで送信&ActiveModelの基本的な使い方とバリデーション:開発現場でちゃんと使えるRails 4入門(10)(2/2 ページ)
エンタープライズ領域での採用も増えてきたRuby on Railsを使ってWebアプリケーションを作るための入門連載。最新版の4に対応しています。今回は、SMTPにGmailも使えるActionMailerの設定、ERB記法で埋め込むメールのテンプレート、永続化しないデータをActiveModelで扱う方法などを解説。
永続化しないデータを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アプリの設計をMVCごとに見直しリファクタリングして連載総まとめ
- 「設定より規約」のRailsで必要なセッティングの基礎知識と国際化/多言語対応
- ActionMailerのSMTP設定、テンプレートで送信&ActiveModelの基本的な使い方とバリデーション
- RailsテストフレームワークRSpecのインストールと基本的な使い方、基礎文法
- RailsのテンプレートエンジンSlimの書き方とActionViewのヘルパーメソッド、レイアウトの使い方
- Rails開発を面白くするアクションコントローラーの5大機能とルーティングの基本
- ActiveRecordにおけるモデルの「関連」とコールバックの使い方
- ActiveRecordの基本機能とマイグレーション、バリデーション
- 現場で使えるか見極めたいRails 4.1の新機能8選
- 特定データに関するscaffoldアクションの実装&基礎的なリファクタリング手法
- scaffoldの中身を理解するためにMVCコンポーネントと7つのアクションを個別で自作する
- 簡単インストールから始める初心者のためのRuby on 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:山根 剛司
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Ruby on Rails 4.1でDevOps環境を考慮した体系的な知識を付ける
エンタープライズ領域での高速なWebアプリケーション開発にも採用され始めているRuby on Rails。最新版である4.1の実践的な解説書が登場した。DevOps環境を前提としたチュートリアルが掲載されているなど、現代的な内容になっている。 - @IT自分戦略研究所 資格辞典:Rails技術者認定試験(Rails 3 Certified Programmer)
- 資格試験は転職に役立つか:Rails技術認定試験がスタート、合格者に聞いた