SOLG System Blog

[Rails] テーブル無しのモデルでお問い合わせフォームをつくる(その1?)

2015年12月31日

望月です。皆さん、年末いかがお過ごしでしょうか。
入社して2年目の後半になり、なにか新しいことを・・・ということで、最近少しRailsをかきはじめました。
勉強のためにまずお問い合わせフォームを制作してみているので、それについてまとめておこうと思います。
(phpを業務で書きはじめた時、お問い合わせフォームを量産して修行をしたことを思い出します。。)

今回は、テーブルと関連づかないモデルを使ってお問い合わせフォームをつくります。

■参考
Ruby on Rails ガイド:体系的に Rails を学ぼう (Rails 4.2 対応)
 http://railsguides.jp/
たのしいRuby 第4版 高橋 征義
 http://www.amazon.co.jp/dp/4797372273/ref=cm_sw_r_tw_dp_Qy.Gwb0M63YMR

こんな記事もありました。
PHPとRubyを徹底比較!開発効率をあげて収益を増やす
 http://techracho.bpsinc.jp/piichan1031/2013_05_13/8578
メリット・デメリット等もそうですが、記述もだいぶ違っていて驚いています。
(文のおわりに ; がいらなかったり、関数をかくときに括弧を省略できたり、returnを省略できたりetc.)

お問い合わせフォームの仕様


3画面
 入力画面(エラー画面)/ 確認画面 / 完了画面

入力フォームは4つ(入力チェックを行う)
 お名前【必須】/ 電話番号 / メールアドレス【必須】/ お問い合わせ内容【必須】

入力エラーは各項目の下に表示する
 ※これ、実はあとで変更します

以上の仕様で制作開始です。

フォームの実装


ビュー

上記では項目が「お名前」のみですが、とりあえずこんな感じで記述しました。

モデル

通常Railsではテーブルを関連づけたモデルをつくることで、validationなどをActiveRecordの機能を用いて実装できるので便利です。
しかし今回のお問い合わせフォームのようにテーブルはいらないけど、validationを自分で実装したくない・・・という場合などに、ActiveModelを使うことでテーブル無しのモデルをつくり、ActiveRecordのvalidation機能を使うことができます。
ちなみにActiveModelを使えるのはrails4からみたいです。
〜rails3の場合は、Activeattrというgemを使用して実装できるようなので、こちらを参考にしてみてください。

コントローラー

テーブルに関連づいているモデルの場合saveのタイミングでvalidationが実行されますが、今回はインスタンス生成の際に値をセットし、valid?で実行させます。

ja.ymlの記述もその他のモデルとは異なり、activerecordではなくactivemodelとして記述します。
わたしはactiverecord側に書いてしまっていて、エラーメッセージに項目名がでてこなくてしばらく困りました・・・


エラー文を各項目の下に表示できない・・・


validationでエラー画面へ遷移した際、エラー文を@contacts.errors.messagesで取得しようと考えたのですがこれでは項目名が表示されない。
@contacts.errors.full_messagesで取得すると、項目名まで全部表示されますが、エラーメッセージのみの配列なので各項目の下に表示するのが難しい。
ということで、エラー文はフォームの上部にまとめて表示するように、一旦使用を変更・・・。
良い実装方法を知っている方がいましたら教えてください。
(railsのバージョンが上がれば対処法が見つかるかも・・・?)

まとめ・積み残し


ということで、お問い合わせフォーム、validationを通してエラー画面と確認画面に値を表示するところまで制作しました。
残りとしてはざっくり
・確認画面に[入力画面へ戻る]ボタンをつくる
・確認画面に[送信]ボタンをつくり、完了画面でお問い合わせ内容をメール送信する

値の保持には、flashを使おうと思ったのですが、fuelと違って配列を渡すことができないのですね。
年末年始の休暇中に調べながら完成させます。

今は、はじめたばかりで手探りで進んでいる状態ですが・・・来年にはrubyバリバリかけるようになりたいですね。
2016年は入社3年目に突入します。
もっと新しいことに挑戦して、技術力向上の年にしたいと思います。
それでは良いお年を!

同じカテゴリー(システム制作)の記事画像
憧れの月額課金サービスモデル(レビュー)。
非デザイナーでも困らない!Bootstrapのページが誰でも簡単につくれるジェネレーター5つ
AWS summit Tokyo 2015に行ってきました!
フロントエンドエンジニアを目指して
怪しげだったものが世界を作る
来年のアクセス目標を上手に立てたい!
同じカテゴリー(システム制作)の記事
 MEANと私(出会い編) (2016-01-29 20:00)
 [Rails]Railsのバージョンを上げたことでspatial_adapterが使用できなくなりました (2016-01-14 23:03)
 憧れの月額課金サービスモデル(レビュー)。 (2015-12-04 18:33)
 非デザイナーでも困らない!Bootstrapのページが誰でも簡単につくれるジェネレーター5つ (2015-07-13 07:26)
 AWS summit Tokyo 2015に行ってきました! (2015-06-10 11:54)
 フロントエンドエンジニアを目指して (2015-03-23 11:30)

Posted by iA SEチーム at 02:06│Comments(0)システム制作
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

PageTop

削除
[Rails] テーブル無しのモデルでお問い合わせフォームをつくる(その1?)
    コメント(0)